使用以前的docker版本,在我通过向图像发送env变量来更改它之后,“hostname”和“echo $ HOSTNAME”的命令返回相同的内容。
为什么我使用它是我想通过调用hostname或$ HOSTNAME将新主机插入/ etc / hosts。所以我在这个泊坞窗内的服务/应用程序可以获得“真实的”IP地址或我指定的IP地址,而不是泊坞内部的地址。
在以前的docker版本中,我可以通过分配env变量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
进入泊坞窗容器,然后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
这是我上面提到的错误行为,以前的泊坞版本没有发生过类似的事情。
在这种情况下,容器中的服务将不知道我分配的IP但是去了docker内部IP。这不是我想要的。而且在我看来并不正确。
我尝试了Ubuntu 16.04和Centos 7.2;在我升级docker v1.10之前,两个发行版都按预期工作。升级后的docker到v1.12.1和v1.12.3之后,两者都“错误”了。
对于docker v1.12中的swarm模式,这是一个bug还是故意?
我怎样才能根据需要更改主机名?
答案 0 :(得分:4)
搬运工-compose.yml
version: '2'
services:
test:
build: .
hostname: thisservice
image: dockerv1.12-tes