我想更新我的 /etc/hosts文件在“码头建设”。
/etc/hosts
我在 Dockerfile 添加了以下内容,但它既没有更新 ABc0文件,也没有出现任何错误。
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
我需要更新 /etc/hosts。有人能对此提出建议吗?
使用最新版本的 docker,这可以通过 docker-compose 及其 extra_hosts指令来完成
extra_hosts
添加主机名映射。 使用与 客户端 --add-host参数相同的值(应该已经可用于 docker 1.8)。
--add-host
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
简而言之: 在运行容器时修改它的 /etc/hosts,而不是在构建它时修改它。
对于 Docker17.x + ,您有一个 docker build --add-host提到的 下面,但是,正如在 第34078期和 这个答案中所注释的:
docker build --add-host
构建期间的 --add-host特性旨在允许在构建期间重写主机,但不能在映像中持久存储该配置。
上面提到的解决方案确实指的是我上面建议的码头作业方案:
运行一个内部 DNS; 您可以将默认 DNS 服务器设置为在守护进程中使用; 这样,每个启动的容器都将在默认情况下自动使用配置的 DNS
docker-compose.yml
下面的工作为我安装的文件在多克运行,而不是多克构建
docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image>
在 RUN步骤中不能使用 echo修改映像中的主机文件,因为在从映像启动容器时,docker 守护进程将维护该文件(/etc/hosts)及其内容(hosts 条目)。
RUN
echo
然而,可以使用以下方法来实现同样的目标:
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 " ]
这里需要注意的关键是按照 docker 文档的建议使用 exec命令。使用 执行委员会将使 java 命令成为容器的 PID 1。Docker 中断只会回应这个。
exec
参见 https://docs.docker.com/engine/reference/builder/#entrypoint
只是一个运行容器的快速答案,使用:
docker exec -it <container name> /bin/bash
一旦集装箱打开:
cd ..
那么
`cd etc`
然后你就可以了
cat hosts
或:
apt-get update apt-get vim
或者任何你喜欢的编辑器,然后在 vim 中打开它,这里你可以修改你的启动 ip 到0.0.0.0
我认为 Docker 最近增加了 --add-host标志,这是真正伟大的 Docker 构建。
[编辑] 因此,这个特性在 < a href = “ https://docs.docker.com/release-note/docker-ce/# 17040-ce-2017.04.05”rel = “ noReferrer”> 17.04.0-ce 上更新
有关如何使用带有 --add-host标志的 docker build的详细信息,请访问: https://docs.docker.com/edge/engine/reference/commandline/build/
docker build
由于这仍然是谷歌的第一个答案,我将提供可能的解决方案。
从 给你获得的命令对我来说非常有用(Docker 1.13.1,Ubuntu 16.04) :
docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name>' >> /etc/hosts"
如果这对任何人都有用的话,那么 HOSTALIASES env 变量对我来说是有用的:
HOSTALIASES
echo "fakehost realhost" > /etc/host.aliases export HOSTALIASES=/etc/host.aliases
您可以在运行 docker 时使用以下命令
docker run [OPTIONS] --add-host example.com:127.0.0.1 <your-image-name>:<your tag>
在这里,我映射 example.com到本地主机 127.0.0.1及其工作。
example.com
127.0.0.1
Tis is me Dockefile FROM XXXXX ENV DNS_1="10.0.0.1 TEST1.COM" ENV DNS_1="10.0.0.1 TEST2.COM" CMD ["bash","change_hosts.sh"]` #cat change_hosts.sh su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"
您可以在 Docker 运行期间使用 主持人选项。
适用于您的案例: Docker run —— add-host mynginx: 192.168.33.11[ image _ name ] : [ tag ]
这将更新您的 /etc/hosts
你可使用以下命令检查:
如果 嘘不适合你,那么你可以尝试 Bash或 [垃圾桶]或 /bin/bash
我只是创建了一个 sh 脚本并在 start docker 上运行它。
在这个脚本中,我启动所有服务并更新主机文件:
在 Dockerfile 上:
CMD /tmp/init_commands.sh & sleep infinity
Init _ commands. sh
any other commands... echo "192.168.11.5 XXXXXXX" >> /etc/hosts echo "192.168.11.6 XXXXXXY" >> /etc/hosts echo "192.168.11.7 XXXXXXZ" >> /etc/hosts