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