【问题标题】:Setting the hostname for a container running in Kubernetes为在 Kubernetes 中运行的容器设置主机名
【发布时间】:2015-07-22 01:37:23
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

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

    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 名称来影响它

    【讨论】:

    • 如果我尝试使用hostname 命令我得到错误hostname: you must be root to change the host name,即使它在一个容器中它作为uid 0 运行。我尝试修改/etc/hostname 和@987654331 @ 正如您链接到的页面所暗示的那样,但主机名仍然是 Kubernetes 设置的。我明显无法从页面运行sudo service hostname restart 命令,但有一个/etc/init.d/hostname.sh。我不能像argument 'restart' not supported 那样使用restart,当我使用start 时,我得到与hostname 命令相同的错误。
    • 您需要在主机名命令前使用 sudo。即使容器本身在主机的进程树上以uid:0 运行,容器内的服务也有自己的用户空间(至少我是这么认为的)。 sudo hostname host.example.com 有效吗?
    • 东西在我的容器中的 uid 0 下运行,所以 sudo 不应该改变任何东西。不管我安装 sudo 并运行 sudo hostname -b webauth-kube.csh.rit.edu。我又收到了错误hostname: you must be root to change the host name
    • 我怀疑你可以在 Kubernetes 中设置主机名,因为 pod 的事情;所有容器将共享相同的网络命名空间。
    • 当它询问时,有什么方法可以对有关机器主机名的进程撒谎吗?我的确切问题是 Kerberos 不知道它的域。
    【解决方案2】:

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

    1. 运行

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

      输出将是一个数字

    2. 运行此命令登录容器

      nsenter --target 15580 --uts
      
    3. 运行此命令更改主机名

      hostname "node_js"
      

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 2022-06-15
      • 2021-07-08
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多