更改主机 Ubuntu 16.04.4 LTS 正在运行的容器的名称

更改主机 Ubuntu 16.04.4 LTS 正在运行的容器的名称

我的主人:

» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.4 LTS
Release:    16.04
Codename:   xenial

我的码头工人:

» docker --version 
Docker version 17.05.0-ce, build 89658be

我尝试过的:

1)在容器中设置主机名:由于容器缺乏正确的功能而失败

root@172:/# hostname something
hostname: you must be root to change the host name

2)在容器内手动编辑/etc/hostname:容器重启后无效,不重启也没有任何意义。

3)手动编辑容器配置:它不起作用,不知道为什么。

sudo vi /var/lib/docker/containers/834787a141d73b359814055b5fc0ba3e1cc52effeb6f916e2adece297d600772/config.v2.json

4)使用命名空间工具更改主机中容器的主机名,如下所述这里Ubuntu 16.04.4 LTS:由于我无法访问命名空间工具,因此这是不可能的。

我还有什么其他选择?

基本原理

GitLab 似乎将其当前主机名传递给 GitLab 运行器,以便它克隆存储库。在默认网络中,无法通过名称访问容器,只能通过 IP 地址访问。这意味着我需要将 gitlab 容器的主机名设置为 IP 地址,但只有在它已经运行时我才有 IP 地址。因此,唯一的解决方案是:

  1. 运行容器
  2. 查找其 IP 地址
  3. 使用 IP 地址覆盖主机名
  4. 现在 gitlab 和 gitlab runner 可以互相通信了

另一个(干净的)选项是在自定义网络中启动容器(gitlab 和 gitlab-runner),以便可以通过真实主机名访问它们,但目前我遇到的问题是,使用自定义网络时,由 gitlab runner 启动的容器无法到达 runner 生成的所需容器服务。

答案1

对你的问题的回答是错误的,但是你想要的答案是:

您可以在创建容器时使用选项设置主机名,例如:

docker run --hostname example.com image_name

为什么这是错误的答案?因为你应该把容器当作牛,而不是一只有名字的宠物。如果你以 swarm stack 或 docker compose 的形式运行容器,请调整 gitlab 和运行器以使用服务名称。或者,如果你使用 启动容器docker run,则可以使用容器名称,但我建议尽快切换到服务以简化更新。


对于上述情况,还有一个更糟糕的解决方案,您可以向容器添加功能,以允许它从容器内部更改自己的主机名。这会造成安全漏洞,不建议在任何安全很重要的环境中使用:

docker run --cap-add SYS_ADMIN ...

答案2

为了方便更新,请在 docker 主机上进行更新。在 docker run 命令中使用类似这样的选项。

-v ./hosts:/etc/hosts -v ./hostname:/etc/hostname

您将能够更新主机上的文件,而无需进入容器并更新文件。

相关内容