如何在“docker build”期间更新Docker镜像中的/ etc / hosts文件

我想在“docker build”期间更新我的/etc/hosts文件。

我在Dockerfile的下面添加了一行,但是它没有更新/etc/hosts文件也没有提供任何错误。

 RUN echo "192.168.33.11 mynginx" >> /etc/hosts 

我需要更新/etc/hosts 。 任何人都可以在这个build议?

使用更新版本的docker,你可以用dokcer-compose和extra_hosts指令来做到这extra_hosts

添加主机名映射。
使用与docker run client相同的值--add-host参数 (docker 1.8已经可用)。

 extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229" 

简而言之:在运行时修改容器的/etc/hosts ,而不是构build它。

您不能在RUN步骤中使用echo修改主机文件,因为docker会在启动时维护该文件,并且该文件的内容将由dockerpipe理。

但是,以下可以用来实现相同的:

 ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ] 

这里要注意的关键是使用exec命令作为docker文档build议。 使用exec将使java命令成为容器的PID 1。 Docker中断只会响应。

请参阅https://docs.docker.com/engine/reference/builder/#entrypoint

我认为docker最近添加了 – --add-host标志的dockerbuild设这真的很棒。

[编辑]所以这个function在17.04.0-ce更新

有关如何使用--add-host标志使用docker build更多详细信息,请访问: https : //docs.docker.com/edge/engine/reference/commandline/build/

以下工作通过在docker运行而不是docker build中挂载文件

 docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image> 

只需要一个快速的答案来运行你的容器使用:

 docker exec -it <container name> /bin/bash 

一旦容器打开:

 cd .. 

然后

 `cd etc` 

然后你可以

 cat hosts 

要么:

 apt-get update apt-get vim 

或者你喜欢的任何编辑器,并在vim中打开它,在这里你可以修改说你的启动IP为0.0.0.0