Docker v1.12无法通过env变量$ HOSTNAME更改主机名

时间:2016-11-07 13:39:46

标签: docker hostname

使用以前的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还是故意?

我怎样才能根据需要更改主机名?

1 个答案:

答案 0 :(得分:4)

搬运工-compose.yml

version: '2'
services:
  test:
    build: .
    hostname: thisservice
    image: dockerv1.12-tes