docker - 如何将 /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) ? 有没有人遇到过这种情况?
解决方案
你有两个选择:
在您的使用中运行您的container
asroot
并application
使用另一个用户运行您的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
推荐阅读
- python-3.x - 将数组数组展平为数组向量
- node.js - Twilio:如何通过 API 获取程序化聊天统计信息?
- c++ - 0xC0000005:访问冲突写入位置 0xCDCCDCD 动态分配错误
- google-apps-script - 使用 parseCsv 生成的 csv 文件是否存储在某处?
- python - 使用 boost python 元组,如何循环元组项?
- html - 我的目标是在悬停时将图标替换为文本。我遇到的问题是当图标悬停时所有图标都向左移动
- windows - Powershell将文件从映射驱动器“Z:”复制到用户本地“C:”
- c# - 如何处理 SSL/TLS 证书错误在 HttpClient 上不断发生的情况,即使我覆盖了委托?
- string - 随机字符串选择器(字符串名称完全相同,除了数字)
- python - Numpy:将单个元素广播到 len n 数组