有没有办法将主机名添加到现有 docker 容器?
Is there a way to add a hostname to an EXISTING docker container?
我有一些容器通过网络 docker 的 IP 进行通信。
当 运行 新容器时,我可以使用选项 -h
或 --hostname
,但我想为现有容器设置主机名。
可能吗?
通常,您需要 stop/restart 一个容器,以便使用 -h (--hostname) (unless you used --net=host
)
再次 运行 它
如果您无法停止容器,您可以尝试(在附加的 bash 会话中)edit its /etc/hostname
。
容器创建后主机名是不可变的(尽管从技术上讲您可以修改 /etc/hostname)。
正如另一个答案中所建议的,您不能通过停止或重新启动容器来更改主机名。启动命令没有影响主机名的 Docker 引擎客户端参数。这无论如何都没有意义,因为启动容器只是在已经创建的容器文件系统中启动 ENTRYPOINT 进程(即 /etc/hostname 已经被写入)。
可以在创建容器时使用 --uts=host 参数将容器主机名与主机同步。这共享 UTS 命名空间。我不推荐 --net=host 除非你也想共享主机网络设备(即绕过 Docker 网桥)。
一种方法是创建网络并在该网络中添加不同的容器。
在网络中添加容器时,可以使用docker network
的--alias
选项。像这样:
创建网络:
docker network create <my-network-name>
在网络中添加容器:
docker network connect --alias <hostname-container-1> <my-network-name> <container-1>
docker network connect --alias <hostname-container-2> <my-network-name> <container-2>
docker network connect --alias <hostname-container-3> <my-network-name> <container-3>
尽情享受吧。
所以每个容器都可以通过别名看到其他容器(别名用作主机名)。
我有一些容器通过网络 docker 的 IP 进行通信。
当 运行 新容器时,我可以使用选项 -h
或 --hostname
,但我想为现有容器设置主机名。
可能吗?
通常,您需要 stop/restart 一个容器,以便使用 -h (--hostname) (unless you used --net=host
)
如果您无法停止容器,您可以尝试(在附加的 bash 会话中)edit its /etc/hostname
。
容器创建后主机名是不可变的(尽管从技术上讲您可以修改 /etc/hostname)。
正如另一个答案中所建议的,您不能通过停止或重新启动容器来更改主机名。启动命令没有影响主机名的 Docker 引擎客户端参数。这无论如何都没有意义,因为启动容器只是在已经创建的容器文件系统中启动 ENTRYPOINT 进程(即 /etc/hostname 已经被写入)。
可以在创建容器时使用 --uts=host 参数将容器主机名与主机同步。这共享 UTS 命名空间。我不推荐 --net=host 除非你也想共享主机网络设备(即绕过 Docker 网桥)。
一种方法是创建网络并在该网络中添加不同的容器。
在网络中添加容器时,可以使用docker network
的--alias
选项。像这样:
创建网络:
docker network create <my-network-name>
在网络中添加容器:
docker network connect --alias <hostname-container-1> <my-network-name> <container-1> docker network connect --alias <hostname-container-2> <my-network-name> <container-2> docker network connect --alias <hostname-container-3> <my-network-name> <container-3>
尽情享受吧。
所以每个容器都可以通过别名看到其他容器(别名用作主机名)。