一尘不染

如何授予Docker容器中的非root用户访问主机上安装的卷的权限

docker

我以非root用户身份在Docker容器中运行应用程序。我这样做是因为这是最佳做法之一。但是,在运行容器时,我将主机卷安装到该容器上-v /some/folder:/some/folder。我这样做是因为在docker容器中运行的应用程序需要将文件写入已安装的主机文件夹中。但是由于我以非root用户身份运行应用程序,因此它无权写入该文件夹

是否可以授予docker容器中的非root用户访问托管卷的权限?

如果不是,我唯一的选择是以root身份在docker容器中运行进程吗?


阅读 572

收藏
2020-06-17

共1个答案

一尘不染

这里没有神奇的解决方案:对docker内部的权限的管理与没有docker的权限相同。您需要运行适当的chownchmod命令来更改目录的权限。

一种解决方案是让您的容器以root用户身份运行,并使用ENTRYPOINT脚本进行适当的权限更改,然后再CMD以非特权用户身份使用。例如,将以下内容放入entrypoint.sh

#!/bin/sh

chown -R appuser:appgroup /path/to/volume
exec runuser -u appuser "$@"

假设您有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

2020-06-17