2

我有一个带有入口点的 dockerfile,该入口点在 shell 进程中启动了一个 java 应用程序 jar。我在入口点之前在 dockerfile 中设置了 USER nobody,以确保入口点 shell 由 none 用户而不是 root 执行。AWS ECS 上容器的任务定义负责处理卷和挂载参数。因此,理想情况下,在容器运行时主机上的 /var/log/applogs 以相同的路径安装到容器上。但是发生的情况是,由于用户上下文从 root 切换到了 nobody,因此运行容器(执行入口点)的任何人都没有对容器上 /var/log/applogs/ 目录的写权限。因此,应用程序无法在容器上创建日志文件。我看到的是主机 ec2 /var/log/applogs 安装在由 nobody 用户运行的容器上很好,但是由于 nobody 用户在容器上的此路径上缺少写权限,因此它无法在此处写入应用程序日志. 在 dockerfile 或其他东西上解决这个问题的正确方法是什么?

4

1 回答 1

1

你可以试试这个...

从 Dockerfile中删除USER nobody条目并将您的 Entrypoint 更改为以下脚本:

#!/bin/bash

# change ownership to user=nobody, group=nobody
chown -R nobody:nobody /var/log/applogs

# open with sudo a new shell as user nobody and call your application
sudo -u nobody /bin/bash -c "java -jar /path/to/your/application.jar"

# alternative
# open with su a new shell as user nobody and call your application
# su -s /bin/bash -c "java  -jar /path/to/your/application.jar" nobody
于 2019-08-15T07:43:55.677 回答