如何在Dockerfile中处理特定的主机名,如-h选项
我将CentOS 7用作docker daemon主机和centos:6 Docker映像。
我想安装一些需要可解析主机名作为非环回地址的软件。如果我使用-h选项运行docker映像,例如
docker run -i -t -h myhost centos:6 /bin/bash
然后,我可以安装软件,因为容器中的/ etc / hosts像
[root@myhost /]# cat /etc/hosts172.17.0.7 myhost
127.0.0.1 localhost
[root@myhost /]# ping myhost
PING myhost (172.17.0.7) 56(84) bytes of data.
64 bytes from myhost (172.17.0.7): icmp_seq=1 ttl=64 time=0.033 ms
但是,如果我从Dockerfile创建映像,则无法使用相同的方式。我测试了使用以下Dockerfile创建映像
FROM centos:6ENV HOSTNAME myhost
RUN ping myhost
在docker构建过程中,无法将分配的主机名解析为动态ip addr,如下所示:
$ docker build -t testimage .Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM centos:6
---> a30bc9f3097e
Step 1 : ENV HOSTNAME myhost
---> Using cache
---> e73bf592389e
Step 2 : RUN ping myhost
---> Running in ca54c8eac073
ping: unknown host myhost
INFO[0000] The command [/bin/sh -c ping myhost] returned a non-zero code: 2
如何使用某些解析为动态容器IP地址的特定主机名?
回答:
这在Dockerfile中通常是不可能的。
根据软件的不同,您也许可以执行某种解决方法。例如,您可以尝试类似
RUN echo $(grep $(hostname) /etc/hosts | cut -f1) my.host.name >> /etc/hosts && install-software
通过在安装软件时在同一RUN命令中设置主机名,主机名将在容器的同一层内发生。Docker稍后将覆盖主机名,您必须在运行时重新设置主机名,但是您的软件可能还可以。
如果您必须执行很多操作,则可以尝试使用Packer构建容器。它可以构建Docker容器,但不使用多层。这使得重建速度较慢,下载构建的图像的速度更快,并且在将图像冻结到容器之前对图像执行多项操作更加方便。
以上是 如何在Dockerfile中处理特定的主机名,如-h选项 的全部内容, 来源链接: utcz.com/qa/427939.html