繁体   English   中英

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

[英]Docker v1.12 can not change hostname by env variable $HOSTNAME

使用以前的docker版本,在我通过向图像发送env变量来更改它之后,“hostname”和“echo $ HOSTNAME”的命令返回相同的内容。

为什么我使用它是因为我想通过调用hostname或$ HOSTNAME将新主机插入/ etc / hosts。 所以我的服务器/应用程序在这个docker中可以获得“真正的”IP地址或我指定的IP地址,而不是docker内部的地址。

在以前的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进入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中这是一个bug还是故意用于swarm模式?

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

泊坞窗,compose.yml

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM