在 Kubernetes 中设置容器 运行 的主机名

Setting the hostname for a container running in Kubernetes

我想在 Kubernetes 中的容器 运行 中设置主机名,但 Kubernetes 似乎覆盖了我在运行时设置的任何内容。

我已经尝试在我让 Kubernetes 使用的 docker 图像中设置 /etc/hostname,并在 Dockerfile 的 CMD 中包含 echo "host.example.com > /etc/hostname"

似乎有一个 docker 标志 -h 来设置主机名。有没有办法让我在我的复制控制器中指定它应该使用特殊标志启动容器?

容器的 Debian,如果有帮助的话。

我之前的回答不正确,用正确的信息进行了编辑

docker run-h 标志将在您创建容器时设置它的主机名。

测试一下:docker run -h test.example.com -it ubuntu /bin/bash

docker start 命令没有相同的 -h--hostname 参数。似乎无法更改现有容器的主机名,只能更改映像中的新容器。

但是 w/r/t Kubernetes:关于 Kubernetes 如何处理主机名,有一个开放的 issue on Github。 Kubernetes 似乎没有直接公开 docker 的主机名设置,但您可以通过 pod 名称

影响它

我找到了在容器 运行 之后更改 docker 主机名的答案,或者我可以对现有容器说一些步骤

  1. 运行

    docker inspect -f '{{ .State.Pid }}' <existing_docker_hostname>
    

    输出将是一个数字<15580>

  2. 运行这条命令登录容器

    nsenter --target 15580 --uts
    
  3. 运行这条命令改变主机名

    hostname "node_js"
    

现在退出容器并再次登录,您将看到主机名已更改。