Ändern Sie den Namen des laufenden Containers mit Host Ubuntu 16.04.4 LTS

Ändern Sie den Namen des laufenden Containers mit Host Ubuntu 16.04.4 LTS

Mein Gastgeber:

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

Mein Docker:

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

Was ich versucht habe:

1) Festlegen des Hostnamens im Container: schlägt fehl, da dem Container die richtigen Fähigkeiten fehlen

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

2) Manuelles Bearbeiten /etc/hostnameim Container: hat nach dem Neustart des Containers keine Auswirkungen und ist ohne Neustart zwecklos.

3) Manuelles Bearbeiten der Containerkonfiguration: es funktioniert nicht, keine Ahnung warum.

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

4) Ändern des Hostnamens des Containers im Host mithilfe von Namespaces-Tools, wie beschriebenHier: nicht möglich, Ubuntu 16.04.4 LTSda ich keinen Zugriff auf die Namespace-Tools habe.

Welche anderen Möglichkeiten habe ich?

Begründung

GitLab scheint seinen aktuellen Hostnamen an einen GitLab-Runner weiterzugeben, damit dieser Repositories klonen kann. Im Standardnetzwerk kann der Container nicht über den Namen, sondern nur über die IP-Adresse erreicht werden. Das bedeutet, dass ich den Hostnamen des GitLab-Containers auf die IP-Adresse setzen muss, die IP-Adresse aber erst habe, wenn er bereits läuft. Die einzige Lösung ist daher:

  1. Ausführen des Containers
  2. Finden Sie die IP-Adresse heraus
  3. Überschreiben Sie den Hostnamen mit der IP-Adresse
  4. Jetzt können Gitlab und Gitlab Runner miteinander kommunizieren

Die andere (saubere) Möglichkeit wäre, die Container (Gitlab und Gitlab-Runner) in einem benutzerdefinierten Netzwerk zu starten, sodass sie über den echten Hostnamen erreichbar sind. Derzeit habe ich jedoch das Problem, dass die vom Gitlab-Runner gestarteten Container bei Verwendung benutzerdefinierter Netzwerke nicht in der Lage sind, die vom Runner gestarteten erforderlichen Containerdienste zu erreichen.

Antwort1

Falsche Antwort auf Ihr Problem, aber die Antwort, nach der Sie suchen:

Den Hostnamen kannst du beim Erstellen des Containers mit einer Option festlegen, zB:

docker run --hostname example.com image_name

Warum ist das die falsche Antwort? Weil Sie den Container wie Vieh behandeln sollten, nicht wie ein Haustier mit Namen. Passen Sie Gitlab und den Runner so an, dass sie den Dienstnamen verwenden, wenn Sie Ihre Container als Swarm-Stack oder mit Docker Compose ausführen. Oder wenn Sie Container mit starten docker run, können Sie den Containernamen verwenden, obwohl ich empfehlen würde, so schnell wie möglich zu einem Dienst zu wechseln, um Updates zu erleichtern.


Eine noch schlimmere Lösung als das oben genannte Problem können Sie darin sehen, dem Container Funktionen hinzuzufügen, die es ihm ermöglichen, seinen eigenen Hostnamen innerhalb des Containers zu ändern. Dies führt zu Sicherheitslücken und ist für Umgebungen, in denen Sicherheit wichtig ist, nicht zu empfehlen:

docker run --cap-add SYS_ADMIN ...

Antwort2

Um die Aktualisierung zu vereinfachen, führen Sie sie auf dem Docker-Hostcomputer durch. Verwenden Sie Optionen wie diese mit Ihren Docker-Run-Befehlen.

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

Sie können die Datei auf dem Hostcomputer aktualisieren, ohne in den Container gelangen und die Datei aktualisieren zu müssen.

verwandte Informationen