
我的主人:
» 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 位址。因此,唯一的解決方案是:
- 運行容器
- 找出它的IP位址
- 用 IP 位址覆蓋主機名
- 現在 gitlab 和 gitlab runner 可以互相溝通了
另一個(乾淨的)選項是在自訂網路中啟動容器(gitlab 和 gitlab-runner),以便可以透過真實主機名稱存取它們,但目前我遇到的問題是 gitlab 運行程式啟動的容器不是使用自訂網路時能夠存取運行器產生的所需容器服務。
答案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
您將能夠更新主機上的文件,而無需進入容器並更新文件。