有没有办法将主机名添加到现有 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>
    
  • 尽情享受吧。

所以每个容器都可以通过别名看到其他容器(别名用作主机名)。