在Docker容器中使用setuid

3
我有一个容器需要在启动时执行某些只能由root完成的初始化操作,但遵循良好的实践原则,我不希望容器以root身份运行。
我想应该可以在容器内创建一个脚本,由root拥有并设置setuid位。然后使用非root用户启动容器,在执行脚本时进行初始化,容器执行所需的操作。
但这似乎行不通。即使脚本由root拥有并设置了setuid位,初始化脚本仍以非root用户身份运行。
这样做应该可以吗?还有其他更好的方法吗?
我在Mac上使用Docker Desktop。
我需要进行的初始化操作是使用仅在容器内部可确定的值更新/etc/hosts,具体而言是与host.docker.internal相关联的IP地址。
我尝试让Dockerfile内的非root用户将/etc/hosts设为可写,但这也不起作用。当容器运行时,/etc/hosts是一个挂载的卷,chmod和chown似乎对正在运行的容器中的文件没有影响。
1个回答

1

为了实现您的目标,您可以在Dockerfile中指定在安装脚本后使用非root用户。

例如:

FROM ...
RUN ./install.sh
USER foo
...

这个Dockerfile将会以root身份启动安装程序,并在切换到所选用户后运行。
希望对您有用!

谢谢Davide,但很遗憾,如果我理解正确的话并不是这样。初始化脚本必须在容器运行时运行,而不是在镜像构建时运行。 - Brian

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