Wie spezifiziere ich den Hostnamen für den laufenden Container?

51

Ich habe Probleme beim Festlegen des Hostnamens für einen ausgeführten Docker-Container. Ich habe auch Probleme beim Festlegen des Hostnamens, nachdem das Image gestartet wurde.

Ich habe einen Container von einem Bild gestartet, das ich heruntergeladen habe:

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

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

Miguel Ping
quelle
Können Sie den Container einfach anhalten und erneut starten, indem Sie einen Hostnamen angeben?
Dawud
AFAIK, die nur funktioniert, wenn Sie runein Bild, nicht, wenn Sie einen Container starten.
Miguel Ping
Manchmal ist alles, was Sie wollen, die Bash-Eingabeaufforderung mit einem richtigen Namen zu sehen. In diesem Fall können Sie den PS1-Wert in .bashrc bearbeiten. Vorschläge finden Sie unter askubuntu.com/a/549150/55365 . In jeder PS1 können Sie eine (farbige) Zeichenfolge mit * oder # hinzufügen, um sie vom Namen des Servers oder Dienstes abzuheben.
SPRBRN
@dawud Sie können keinen neuen Hostnamen angeben, wenn Sie die docker restart Dokumentation
ausführen

Antworten:

48

Bearbeiten /etc/hostnameist eine Sache, für die Sie SSH-Zugriff im Container benötigen. Andernfalls können Sie den Container mit der -hOption drehen .

So legen Sie die Host- und Domainnamen 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
Amitmula
quelle
5
Sie können docker exec /bin/bashauf einem laufenden Container, keine Notwendigkeit zu installieren ssh(was imho eine schlechte Praxis für Verwaltungszwecke ist).
jjmontes
Möglicherweise möchten Sie auch / etc / hosts bearbeiten, damit es korrekt in eine Adresse aufgelöst wird.
Dtoubelis
2
Sie können den Hostnamen in einem laufenden Container nicht mit hostname(fehlende Fähigkeit) ändern . Beim Ausführen docker run -h <hostname> <image> <container-name>wird ein neuer Container mit dem angegebenen Hostnamen erstellt.
Dangonfast
6

Behälter und Service stoppen

sudo docker stop CONTAINER_NAME
sudo service docker stop

Konfigurationsdatei bearbeiten (JSON) [Sie sollten zuerst ein Backup erstellen]

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

Ersetzen

"Hostname": "WHATEVER"

mit

"Hostname": "NEW_HOSTNAME"

Behälter und Service starten

sudo service docker start
sudo docker start CONTAINER_NAME

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

sudo docker attach CONTAINER_NAME

Details zu Dockern (dh CONTAINER_NAME, CONTAINER_ID) können durch Ausführen abgerufen werden

sudo docker ps -a
Tomot
quelle
funktioniert nicht werde jedes Mal überschrieben, wenn ich den Container starte.
Ahmed
das ist merkwürdig. Ich habe gerade diese Schritte reproduziert und es funktioniert immer noch. Docker-Version 1.7.1. Sind Sie sicher, dass Sie Container und Service geschlossen haben, bevor Sie die Datei bearbeitet haben?
Tomot
Funktioniert auf Docker 17.04.0-ce, wenn die Bearbeitung von / etc / hostname nicht funktioniert hat. Wenn Sie den Container noch nicht erstellt haben, ist die andere Antwort mit -h besser, aber in meinem Fall hatte ich bereits die Mühe, den Container einzurichten, und wollte ihn nicht neu erstellen, nur um den Hostnamen festzulegen.
Una
Funktioniert nichtDocker version 17.05.0-ce, build 89658be
dangonfast
4

Ein Neustart des Containers ist die einfachste Option. Sie können jedoch auch / etc / hostname bearbeiten und von dort aus fortfahren.

James V
quelle
Das Bearbeiten /etc/hostnamehat nach dem Neustart keine Auswirkung, da es jedes Mal mit dem "echten" Hostnamen überschrieben wird, der vom Docker verwaltet wird. Sie können nicht hostnameauf dem Container ausgeführt werden, da der Container keine Funktionen für diesen Vorgang hat (standardmäßig, und Sie möchten das nicht ändern)
dangonfast
Das Bearbeiten /etc/hostnameund Nicht-Neustarten des Containers hat keinen Zweck.
Dangonfast
1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces beschreibt eine Möglichkeit, dies zu tun. Die Grundidee besteht darin docker inspect, die PID des Containers zu ermitteln und dann den uts-Namespace des Containers über einzugeben nsenter. Wenn Sie hostnamein diesem Namespace arbeiten, wird der Hostname für die Docker-Instanz geändert, die diesen Namespace gemeinsam nutzt.

Chaim Geretz
quelle
2
Bitte fügen Sie die Lösung direkt hier hinzu und nicht einen externen Link, der möglicherweise verschwindet
Orphans
0

Wie einige andere angemerkt haben, kann dies für Container durch Ändern der config.v2.jsonDatei geändert werden.

Stellen Sie sicher, dass der Docker-Dienst beendet ist, bevor Sie die Datei bearbeiten. Andernfalls wird die Datei überschrieben. Die Schritte müssen in dieser Reihenfolge durchgeführt werden

  • Stoppen Sie den Container
  • Beenden Sie den Docker-Dienst
  • Ändern Sie die /var/lib/docker/containers/CONTAINER_ID/config.v2.jsonDatei - -

  • Starten Sie den Docker-Dienst

  • Starten Sie den Container

Es wurde bestätigt, dass ich mit Docker v17.05.0-ce an einem Container mit arbeite --net=host. Das Ändern der /etc/hostnameDatei funktioniert nicht und die Datei wird nur überschrieben.

user1270949
quelle
-3

Im

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

finden und einstellen

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}
Oleg Neumyvakin
quelle
Funktioniert nicht Docker version 17.05.0-ce, build 89658be. Konfig wird überschrieben, wer weiß woher. Und der Hostname selbst ändert sich nach dem Neustart nicht.
Dangonfast