我以非root用户身份在Docker容器中运行应用程序。我这样做是因为这是最佳做法之一。但是,在运行容器时,我将主机卷安装到该容器上-v /some/folder:/some/folder。我这样做是因为在docker容器中运行的应用程序需要将文件写入已安装的主机文件夹中。但是由于我以非root用户身份运行应用程序,因此它无权写入该文件夹
-v /some/folder:/some/folder
题
是否可以授予docker容器中的非root用户访问托管卷的权限?
如果不是,我唯一的选择是以root身份在docker容器中运行进程吗?
这里没有神奇的解决方案:对docker内部的权限的管理与没有docker的权限相同。您需要运行适当的chown和chmod命令来更改目录的权限。
chown
chmod
一种解决方案是让您的容器以root用户身份运行,并使用ENTRYPOINT脚本进行适当的权限更改,然后再CMD以非特权用户身份使用。例如,将以下内容放入entrypoint.sh:
ENTRYPOINT
CMD
entrypoint.sh
#!/bin/sh chown -R appuser:appgroup /path/to/volume exec runuser -u appuser "$@"
假设您有runuser可用的命令。您可以使用sudo替代品完成几乎相同的事情。
runuser
sudo
通过ENTRYPOINT在Dockerfile中包含指令来使用以上脚本:
FROM baseimage COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/bin/sh", "entrypoint.sh"] CMD ["/usr/bin/myapp"]
这将以以下内容启动容器:
/bin/sh entrypoint.sh /usr/bin/myapp
入口点脚本将进行所需的权限更改,然后以/usr/bin/myapp身份运行appuser。
/usr/bin/myapp
appuser