【发布时间】:2016-11-07 13:39:45
【问题描述】:
在以前的 docker 版本中,“hostname”和“echo $HOSTNAME”的命令返回相同的内容,在我通过将 env 变量发送到图像中进行更改后。
我使用它的原因是 我想通过调用主机名或 $HOSTNAME 将新主机插入 /etc/hosts。因此,我在这个 docker 中的服务/应用程序可以获得“真实”IP 地址或我分配的 IP 地址,而不是 docker 内部的。
在以前的 docker 版本中,我可以通过分配环境变量 HOSTNAME 来更改主机名,这将相应地更改主机名。但现在,使用 docker 版本 1.12。这种 linux 操作在那种 linux 行为中不起作用。
所以如果这样写:
version: '2'
services:
test:
build: .
extra_hosts:
thisservice: "192.168.1.7"
environment:
- HOSTNAME=thisservice
image: dockerv1.12-test
Dockerfile:
FROM alpine
CMD sleep 120
通过docker-compose exec test sh进入docker容器,然后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
192.168.1.7 thisservice
172.28.0.2 80260fa6667f
同时:
$ hostname
80260fa6667f
$ echo $HOSTNAME
thisservice
这是我上面提到的错误行为,以前的 docker 版本不会发生这种情况。
在这种情况下,容器中的服务将不知道我分配的 IP,而是选择 docker 内部 IP。这不是我想要的。在我看来,这不是正确的行为。
我在 Ubuntu 16.04 和 Centos 7.2 上都试过;在我升级 docker v1.10 之前,两个发行版都按预期工作。在将 docker 升级到 v1.12.1 和 v1.12.3 后,两者都出现了“错误”。
那么这是 docker v1.12 中的集群模式的错误还是故意的?
如何根据需要更改主机名?
【问题讨论】: