使用Dockerfile将卷目录权限挂载到非root用户

3
我有一个dockerfile,其中entrypoint以shell进程启动java app jar。在entrypoint之前,我已经在dockerfile中设置了USER nobody,以确保entrypoint shell由nobody用户而不是root用户执行。AWS ECS上容器的任务定义负责卷和挂载参数。因此,在容器运行时,理想情况下,主机上的/var/log/applogs会挂载到具有相同路径的容器中。但实际情况是,由于从root用户切换到nobody用户,因此运行容器(执行entrypoint)的nobody没有权利向容器中的/var/log/applogs/目录写入。因此,应用程序无法在容器中创建日志文件。 我看到的是,主机EC2上的/var/log/applogs成功地挂载到由nobody用户运行的容器上,但由于nobody用户在容器中缺少对该路径的写权限,因此无法将应用程序日志写到此处。 在dockerfile或其他方面,如何正确解决这个问题?
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接