Dockerfile如何添加localhost别名
Dockerfile如何添加localhost别名?
您好我需要在Dockerfile
添加localhost
别名我做到以下几点:
RUN echo '127.0.0.1 locdev' >> /etc/hosts
但是当我然后去形象bash控制台
$ docker exec -it my-image bash
并尝试ping该主机,它会抛出错误
$ ping locdev ping: unknown host
什么/etc/hosts
包含?
$ cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.4 62a5e2d10730
没有其他logging
有谁知道我该怎么做? 我需要在Dockerfile
做这个,因为外部服务运行这个Dockerfile
,我不从命令行运行它。
在我的情况下,它是一个PHP
应用程序,在Bitbucket
存储库中。 有一个新function叫做PIPELINES
。 它在Docker
镜像上运行应用程序构build。
在我的情况下,这个应用程序连接到mysql
服务器,我不能改变configuration(这将打破生产)。 在那个docker上的图像,我已经build立了mysql
服务器。 所以localhost
工作,但我需要添加这个别名为localhost
不破坏生产服务器;
Dockerfile
片段:
RUN \ aliases="127.0.0.1 localhost locdev" &&\ sed "1s/.*/$aliases/" /etc/hosts RUN cat /etc/hosts
我的docker build
输出示例:
Step 10 : RUN aliases="127.0.0.1 localhost locdev" && sed "1s/.*/$aliases/" /etc/hosts ---> Running in 11ac105d632d 127.0.0.1 localhost locdev ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 383850eeb47b ---> 0248977e48bd Removing intermediate container 11ac105d632d Step 11 : RUN cat /etc/hosts ---> Running in 20fc2f40b5a9 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 383850eeb47b ---> c9e47ee296c5 Removing intermediate container 20fc2f40b5a9 Successfully built c9e47ee296c5
Dockerpipe理你的/etc/hosts
文件。 /etc/host
是不会工作的。
但是,在运行docker create
或docker run
时,可以使用--add-host
选项将其他主机添加到Docker的DNS服务发现中。
这是从docker run --help
的输出 – 帮助:
--add-host value Add a custom host-to-IP mapping (host:ip) (default [])
但请记住,来自容器内部的127.0.0.1将不会将您带到容器主机,但会将您置于容器上,因为它具有自己的127.0.0.1接口。
您的docker主机的eth0 IP地址可以在您的容器内路由。 你可以在你的--add-host
参数中使用它。 例如,如果我的本地networking上的Docker主机是192.168.1.43,我可以docker run --add-host locdev:192.168.1.43 ...
在这一点上, locdev
将从容器内parsing回该ip。
比使用eth0
(或主机上的其他接口)的地址更好,只需使用Docker容器内默认网关的地址即可。 这是容器连接到的主机上Docker维护的桥的地址。 你可以得到这个:
ip route | awk '$1 == "default" {print $3}'
这将永远是你的主机地址。