Docker v1.12不能通过envvariables$ HOSTNAME更改主机名
在以前的docker版本中,“hostname”和“echo $ HOSTNAME”的命令返回的是同样的东西,通过发送一个envvariables到图像中来改变它。
为什么我使用这个方法是通过调用主机名或$ HOSTNAME来将新主机插入/ etc / hosts。 所以我的服务/应用程序在这个泊坞窗内可以得到'真正的'IP地址或我分配的,而不是docker的内部。
在之前的docker版本中, 我可以通过分配envvariablesHOSTNAME来更改主机名,这将相应地更改主机名。 但现在,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中的swarm模式的一个bug吗?
我怎么能改变主机名,因为我需要?
泊坞窗,compose.yml
version: '2' services: test: build: . hostname: thisservice image: dockerv1.12-tes