Dockerfile如何添加localhost别名

var*_*ius 12 docker

Dockerfile如何添加localhost别名?

嗨我需要localhostDockerfile 我做以下内容中添加别名:

RUN echo '127.0.0.1 locdev' >> /etc/hosts

但是当我然后去图像bash控制台

$ docker exec -it my-image bash
Run Code Online (Sandbox Code Playgroud)

并尝试ping该主机它确实抛出错误

$ ping locdev
ping: unknown host
Run Code Online (Sandbox Code Playgroud)

什么/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
Run Code Online (Sandbox Code Playgroud)

没有其他记录

有谁知道我怎么能这样做?我需要在Dockerfile运行此docker的外部服务中执行此操作,并且不从命令行运行它.

就我而言,它是一个PHP应用程序,Bitbucket存放在存储库中.有一个叫做的新功能PIPELINES.它在Docker图像上运行应用程序构建.

在我的情况下,这个应用程序连接到mysql服务器,我无法更改配置(它将打破生产).在那个docker镜像上我设置了mysql服务器.所以localhost工作,但我需要添加此别名,localhost以免破坏生产服务器;

Dockerfile 分段:

RUN \
 aliases="127.0.0.1 localhost locdev" &&\
 sed "1s/.*/$aliases/" /etc/hosts
RUN cat /etc/hosts
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

pro*_*erq 8

Docker /etc/hosts为您管理文件./etc/host不会起作用.

你可以,但是,添加额外的主机多克的DNS服务发现与--add-host运行时选项docker createdocker run.

这是从输出docker run --help:

  --add-host value              Add a custom host-to-IP mapping (host:ip) (default [])
Run Code Online (Sandbox Code Playgroud)

但请记住,容器内的127.0.0.1不会将您带到容器主机,但由于它有自己的127.0.0.1接口,因此会将您置于容器中.

docker主机的eth0 IP地址可以从容器内部路由.你可以在你的--add-host论证中使用它.例如,如果我的本地网络上的Docker主机是192.168.1.43,我可以这样做docker run --add-host locdev:192.168.1.43 ....此时,locdev将从容器内部解析回该ip.