【问题标题】:how to modify /etc/resolv.conf as non root user in docker file or as script如何将 /etc/resolv.conf 修改为 docker 文件中的非 root 用户或脚本
【发布时间】:2019-08-19 07:19:48
【问题描述】:

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

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 的范围或限制用户权限)?有没有人遇到过这种情况?

【问题讨论】:

    标签: docker dockerfile root


    【解决方案1】:

    你有两个选择:

    root 运行您的container 并使用ENTRYPOINT 中的另一个用户运行您的application,使用:

    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
    

    【讨论】:

    • 运行此命令后,我得到 "sed: can't read /etc/sudoers: No such file or directory" 。我尝试在 /etc 文件夹中添加权限,但没有成功。
    • 首先需要安装sudo
    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2014-08-24
    • 2018-07-06
    相关资源
    最近更新 更多