我以非 root 用户身份在 Docker 容器中运行我的应用程序。我这样做是因为它是最佳实践之一。但是,在运行容器时,我将主机卷安装到它 -v /some/folder:/some/folder
。我这样做是因为我在 docker 容器内运行的应用程序需要将文件写入挂载的主机文件夹。但是由于我以非 root 用户身份运行我的应用程序,因此它无权写入该文件夹
问题
是否可以让 docker 容器中的非 root 用户访问托管卷?
如果没有,我唯一的选择是在 docker 容器中以 root 身份运行该进程吗?
原文由 Anthony 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里没有神奇的解决方案:docker 内部的权限管理与没有 docker 的权限相同。您需要运行相应的
chown
和chmod
命令来更改目录的权限。一种解决方案是让您的容器以 root 身份运行并使用
ENTRYPOINT
脚本进行适当的权限更改,然后您的CMD
作为非特权用户。例如,将以下内容放入entrypoint.sh
:这假设您有可用的
runuser
命令。您可以使用sudo
来完成几乎相同的事情。通过在 Dockerfile 中包含
ENTRYPOINT
指令来使用上述脚本:这将启动容器:
入口点脚本将进行所需的权限更改,然后运行
/usr/bin/myapp
asappuser
。