【问题标题】:Docker mount volume directory permissions to non root user using dockerfileDocker 使用 dockerfile 将卷目录权限安装到非 root 用户
【发布时间】:2019-12-21 14:21:07
【问题描述】:
我有一个带有入口点的 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 或其他东西上解决此问题的正确方法是什么?
【问题讨论】:
标签:
linux
shell
dockerfile
amazon-ecs
docker-entrypoint
【解决方案1】:
你可以试试这个……
从 Dockerfile 中删除 USER nobody 条目并更改您的
以下脚本的入口点:
#!/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