如何在“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