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

我想在docker build "更新我的/etc/hosts文件。

我在Dockerfile中添加了行,但是,它不更新/etc/hosts文件也不给任何错误。

 

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



我需要更新/etc/hosts ,谁能对此提出建议?

时间:

使用最新版本的Docker可以用docker-compose和它的 extra_hosts指令来完成

添加主机名映射,
使用与 docker run客户端--add-host参数(它应该已经在 Docker 1.8中可用)相同的值。

 

extra_hosts:


 -" somehost:162.242.195.82" 


 -" otherhost:50.31.209.229" 



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

构建期间的--add-host特性旨在允许在构建期间重写host,但是,不能在映像中持久化该配置。

上述解决方案引用了我上面建议的docker-compose:

  • 运行内部DNS;你可以设置在守护进程中使用的默认DNS服务器; 这样,每个容器启动时都会自动使用配置好的DNS,
  • 使用docker compose,并且向开发人员提供docker-compose.yml ,
    docker compose文件允许您指定启动容器时应该使用的所有选项,因此开发人员可以使用docker compose来启动容器以及他们需要设置的所有选项。

你不能在RUN步骤中使用echo修改主机文件,因为Docker守护进程将在从镜像启动容器时维护file(/etc/hosts)及它内容(主机条目)。

但是,可以使用以下方法实现相同的目标:

 

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文档,exec的使用将使该容器的java命令成为PID 1,Docker中断只会响应。

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

我想Docker最近为 docker build添加了--add-host标志,这真的很好。

[Edit]在 17.04.0 -ce上更新了此功能

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

因为这仍然是谷歌的第一个答案,所以,我会提供可能的解决方案。

这个命令令人惊讶地为我工作(Docker 1.13.1,Ubuntu 16.04):

 

docker exec -u 0 <container-name>/bin/sh -c" echo '<ip> <name>> >/etc/hosts" 



我正在使用AWSElasticbeanstalk +Docker +Supervisord 。

Dockerfile中添加一些代码。

 

CMD echo 123.123.123.123 this_is_my.host> >/etc/hosts; supervisord -n;



运行时可以使用以下命令

docker run [OPTIONS] <your-image-name>:<your tag> --add-host example.com:127.0.0.1

这里我将example.com映射到localhost127.0.0.1及它工作。

下面通过在docker run而不是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 ,

...