如何编写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拥有正确的访问权限。