gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:23:31 28 4
gpt4 key购买 nike

对于以前的 docker 版本,“hostname”和“echo $HOSTNAME”的命令返回相同的东西,在我通过将 env 变量发送到图像中来更改它之后。

我使用它的原因是我想通过调用主机名或$HOSTNAME 将一个新主机插入到/etc/hosts 中。所以我在这个 docker 中的服务/应用可以获得“真实”IP 地址或我分配的 IP 地址,而不是 docker 内部地址。

在以前的 docker 版本中,我可以通过分配环境变量 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

docker 文件:

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 模式的错误还是故意的?

我如何根据需要更改主机名?

最佳答案

docker-compose.yml

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

关于Docker v1.12 无法通过环境变量 $HOSTNAME 更改主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40466619/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com