Frage docker: Legen Sie den Hostnamen für den Container fest


Ich habe Probleme, den Hostnamen auf einem laufenden Docker-Container festzulegen. Ich habe auch Probleme zu verstehen, wie man den Hostnamen angibt nach dem Das Bild wird gestartet.

Ich habe einen Container aus einem heruntergeladenen Bild gestartet:

sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss

Aber ich habe vergessen, Hostnamen durch anzugeben -h; Wie kann ich den Hostnamen jetzt angeben, an dem der Container ausgeführt wird?


38
2018-04-20 09:54


Ursprung


Kannst du den Container einfach anhalten und ihn erneut starten, um einen Hostnamen anzugeben? - dawud
AFAIK, die nur funktioniert, wenn Sie run ein Bild, nicht wenn Sie einen Container starten. - Miguel Ping
Manchmal wollen Sie nur die Bash-Eingabeaufforderung mit einem richtigen Namen sehen. Wenn dies der Fall ist, können Sie den PS1-Wert in .bashrc bearbeiten. Ansehen askubuntu.com/a/549150/55365 für Vorschläge. In jeder PS1 können Sie eine (farbige) Zeichenkette, die von * oder # umgeben ist, hinzufügen, um sie mit dem Namen des Servers oder Dienstes zu unterscheiden. - SPRBRN
@dawud Sie können beim Ausführen keinen neuen Hostnamen angeben docker restart  Dokumentation - dangonfast


Antworten:


Bearbeiten /etc/hostname ist eine Sache, für die Sie ssh Zugriff innerhalb des Containers benötigen. Andernfalls können Sie den Container mit hochfahren -h Möglichkeit.

So legen Sie die Host- und Domänennamen fest:

$ docker run -h foo.bar.baz -i -t ubuntu bash
root@foo:/# hostname
foo
root@foo:/# hostname -d
bar.baz
root@foo:/# hostname -f
foo.bar.baz

36
2017-10-29 09:32



Sie können docker exec /bin/bash auf einem laufenden Container, keine Notwendigkeit zu installieren ssh (was für Verwaltungszwecke eine schlechte Praxis ist). - jjmontes
Sie können auch / etc / hosts so bearbeiten, dass sie korrekt in eine Adresse aufgelöst wird. - dtoubelis
Sie können den Hostnamen in einem laufenden Container nicht mit ändern hostname(fehlende Fähigkeit). Laufen docker run -h <hostname> <image> <container-name> erstellt ein Neu Container mit dem angegebenen Hostnamen. - dangonfast


Der Neustart des Containers wäre die einfachste Option - aber Sie können auch / etc / hostname bearbeiten und von dort gehen.


4
2018-06-24 08:02



Bearbeitung /etc/hostname hat nach dem Neustart keine Wirkung, da es jedes Mal mit dem vom Andockfenster verwalteten "echten" Hostnamen überschrieben wird. Du kannst nicht rennen hostname auf dem Container, da der Container keine Funktionen für diesen Vorgang hat (standardmäßig, und Sie möchten dies nicht ändern) - dangonfast
Und editieren /etc/hostname und das Neustarten des Containers hat keinen Zweck. - dangonfast


Stoppen Sie den Container und den Service

sudo docker stop CONTAINER_NAME
sudo service docker stop

Konfigurationsdatei bearbeiten (JSON) [Sie sollten zuerst eine Sicherungskopie erstellen]

/var/lib/docker/containers/CONTAINER_ID/config.json

Ersetzen

"Hostname": "WAS IMMER"

mit

"Hostname": "NEW_HOSTNAME"

Container und Service starten

sudo service docker start
sudo docker start CONTAINER_NAME

(Optional können Sie auch Andockfenster anhängen)

sudo docker attach CONTAINER_NAME

Details zu Hafenarbeitern (d. H. CONTAINER_NAME, CONTAINER_ID) können durch Ausführen erhalten werden

sudo docker ps -a

3
2018-01-26 16:38



funktioniert nicht. Ich werde jedes Mal überschrieben, wenn ich den Container starte. - Ahmed
Das ist seltsam. Ich habe diese Schritte nur reproduziert und es funktioniert immer noch. Docker-Version 1.7.1. Sind Sie sicher, dass Sie den Container und den Service geschlossen haben, bevor Sie die Datei bearbeitet haben? - Tomot
Funktioniert auf Docker 17.04.0-ce, wenn Sie / etc / hostname nicht bearbeiten. Wenn Sie den Container noch nicht erstellt haben, ist die andere Antwort mit -h besser, aber in meinem Fall war ich bereits mit dem Einrichten des Containers beschäftigt und wollte ihn nicht neu erstellen, nur um den Hostnamen festzulegen. - Una
Funktioniert nicht Docker version 17.05.0-ce, build 89658be - dangonfast


Falls Sie verwenden --net=host dann können Sie den Hostnamen nicht ändern -h oder aus dem Docker.

Sehen https://github.com/docker/docker/issues/5708


3
2018-02-24 21:15





https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces beschreibt einen Weg, dies zu tun. Grundidee ist zu verwenden docker inspect Um die PID des Containers zu erhalten, geben Sie den UTS-Namespace des Containers ein nsenter. Laufen hostname Innerhalb dieses Namespace wird der Hostname für die Docker-Instanz mit diesem Namespace geändert.


0
2018-03-07 15:08



Bitte fügen Sie die Lösung direkt hier hinzu, und nicht eine externe Verbindung, die möglicherweise verschwindet - Orphans


Im

 /var/lib/docker/containers/CONTAINER/config.json

finden und einstellen

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}

-3
2018-05-05 07:41



Funktioniert nicht Docker version 17.05.0-ce, build 89658be. Config wird überschrieben, wer weiß von wo. Und der Hostname selbst ändert sich nach dem Neustart nicht. - dangonfast