首页 > 解决方案 > 如何将 /etc/resolv.conf 修改为 docker 文件中的非 root 用户或脚本

问题描述

基于最佳实践和建议,出于安全原因,我们应该始终以非 root 用户身份运行 docker 容器。这样做时,我面临一个问题,我必须用域名覆盖/etc/resolv.conf文件。我通过脚本例如 env.sh 在 resolv.conf 文件中附加域名(我将此脚本称为例如 The Dokefile 具有以下命令

from dabian:latest
... 
...
ENTRYPOINT[env.sh]

该脚本env.sh只是根据环境附加域名,例如dev/qa/prod 等。

如果我以 root 用户身份运行 docker 容器,则没有问题,因为resolv.conf将使用适当的域名映射(基于环境配置文件)进行更新,但如果我添加非 root 用户(在 docker 文件中)并使用该用户并调用ENTRYPOINT[evn.sh]resolv.conf文件不会得到更新。

是不是因为 docker 中的 hosts 或resolv.conf之类的文件总是被主机配置覆盖,并且只允许 root 修改这些文件(显然看起来像)。

我的问题是,是否可以像非 root 用户一样做,或者有没有办法授予非 root 用户足够的权限来修改resolv.conf并以非 root 用户身份运行(可能是范围或限制用户权限只修改resolv.conf) ? 有没有人遇到过这种情况?

标签: dockerdockerfileroot

解决方案


你有两个选择:

在您的使用中运行您的containerasrootapplication使用另一个用户运行您的ENTRYPOINT

runuser -l YOUR_USER -c "COMMAND_TO_RUN"

或设置无密码sudo并将用户分配给它,如下所示Dockerfile

RUN adduser YOUR_USER sudo
RUN sed -i.bkp -e \
      's/%sudo\s\+ALL=(ALL\(:ALL\)\?)\s\+ALL/%sudo ALL=NOPASSWD:ALL/g' \
      /etc/sudoers

推荐阅读