使用dockerfile对非root用户的Docker挂载卷目录权限

时间:2019-08-15 03:48:28

标签: linux shell dockerfile amazon-ecs docker-entrypoint

我有一个带有入口点的dockerfile,该入口点在shell进程中启动了一个Java应用程序jar。我在入口点之前在dockerfile中设置了USER none,以确保入口点shell是由nobody用户而不是root用户执行的。 AWS ECS上容器的任务定义将处理volume和mount参数。因此,理想情况下,在容器运行时,将主机上的/ var / log / applogs安装到具有相同路径的容器上。但是发生的是,由于用户上下文已从root切换为nobody,因此没有人运行容器(执行入口点)对容器上的/ var / log / applogs /目录具有写权限。因此,该应用程序无法在容器上创建日志文件。 我所看到的是,主机ec2 / var / log / applogs可以很好地安装在没有人用户运行的容器上,但是由于没人用户缺少对容器在此路径上的写入权限,因此无法在此处写入应用程序日志。 在dockerfile或其他文件上修复此错误的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以尝试...

从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