如何编写Dockerfile来更改Docker镜像中的受保护文本文件?
我有一个Dockerfile,遵循这种模式:
RUN echo "[DOCKER BUILD] Installing image dependencies..." && \ apt-get update -y && \ apt-get install -y sudo package_names ... RUN useradd -ms /bin/bash builder # tried this too, same error # RUN useradd -m builder && echo "builder:builder" | chpasswd && adduser builder sudo RUN mkdir -p /home/builder && chown -R builder:builder /home/builder USER builder RUN sudo sed -i '/hosts:/c\hosts: files dns' /etc/nsswitch.conf
不工作的部分是编辑/etc/nsswitch.conf …为什么我不能configuration我的图像来编辑这个文件?
我试过调整useradd几种不同的方式,但目前的错误是:
步骤8/10:运行sudo sed -i'/ hosts:/ c \ hosts:files dns'/etc/nsswitch.conf —>在97cd39584950中运行sudo:没有tty存在,没有指定askpass程序命令'/ bin / sh -c sudo sed -i'/ hosts:/ c \ hosts:files dns'/etc/nsswitch.conf'返回一个非零的代码:1
如何在图像中编辑这个文件?
这里的注释表明dockerfile中的所有操作都应该以root身份运行,这使我相信sudo是不需要的。 为什么然后我看到这个?
RUN sed -i '/hosts:/c\hosts: files dns' /etc/nsswitch.conf
步骤8/10:运行sed -i'/ hosts:/ c \ hosts:文件dns'/etc/nsswitch.conf —>在ad56ca17944c中运行sed:无法打开临时文件/ etc / sed8KGQzP:Permission denied
问题在于sudo的密码或密码请求。 您需要将ENV_VARIABLES传递给您的容器,这与删除sudo密码请求相关,如下所示:
<your-container-user> ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
你需要自由地执行你的sudo。
相关问题:
如何解决'sudo:没有tty目前没有askpass程序指定'错误?
我想通了 – 我可以执行这个任务没有sudo,但只有当我这样做之前调用USER生成器。 看起来,在我创build任何用户之前,docker拥有正确的访问权限。