如何在Dockerfile中处理特定的主机名,如-h选项

前端之家收集整理的这篇文章主要介绍了如何在Dockerfile中处理特定的主机名,如-h选项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我使用CentOS 7作为docker守护进程主机和centos:6 Docker映像.

我想安装一些需要可解析的主机名作为非环回地址的软件.如果我使用-h选项运行docker image

docker run -i -t -h myhost centos:6 /bin/bash

然后我可以安装软件,因为/ etc / hosts在容器中自动配置好像

[root@myhost /]# cat /etc/hosts
172.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:6

ENV 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地址?

最佳答案
这在Docker文件中通常是不可能的.

根据软件的不同,您可能会做一些解决方法.例如,你可以尝试一下

RUN echo $(grep $(hostname) /etc/hosts | cut -f1) my.host.name >> /etc/hosts && install-software

通过将主机名设置为与安装软件相同的RUN命令,它将发生在容器的同一层内. Docker稍后会覆盖主机名称,运行时必须重新设置主机名,但是您的软件可能还可以.

如果您需要做很多工作,您可以尝试使用Packer构建容器.它可以构建Docker容器,但不使用多个层.这使得重建速度更慢,下载内置映像的速度更快,并且使其在将其冻结到容器中之前对图像执行多个操作更为方便.

猜你在找的Docker相关文章