Jak określić nazwę hosta dla uruchomionego kontenera?

51

Mam problem z ustawieniem nazwy hosta na działającym kontenerze dokera. Mam również problem ze zrozumieniem, jak określić nazwę hosta po uruchomieniu obrazu.

Zacząłem kontener z pobranego obrazu:

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

Ale zapomniałem podać nazwę hosta przez -h; Jak mogę określić nazwę hosta teraz, gdy kontener jest uruchomiony?

Miguel Ping
źródło
Czy możesz po prostu zatrzymać kontener i uruchomić go ponownie, podając nazwę hosta?
dawud
AFAIK, który działa tylko w przypadku runobrazu, a nie podczas uruchamiania kontenera.
Miguel Ping,
Czasami wszystko, czego chcesz, to zobaczyć wiersz polecenia bash o właściwej nazwie. W takim przypadku możesz edytować wartość PS1 w .bashrc. Sprawdź sugestie na askubuntu.com/a/549150/55365 Na dowolnym PS1 możesz dodać (kolorowy) ciąg otoczony * lub #, aby go odróżnić, wraz z nazwą serwera lub usługi.
SPRBRN
@dawud nie można podać nowej nazwy hosta podczas docker restart
uruchamiania

Odpowiedzi:

48

Edycja /etc/hostnameto jedna rzecz, do której potrzebujesz dostępu ssh wewnątrz kontenera. W przeciwnym razie możesz podkręcić pojemnik z -hopcją.

Aby ustawić nazwy hosta i domeny:

$ 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
źródło
5
Możesz docker exec /bin/bashna działającym kontenerze, nie trzeba instalować ssh(co jest złą praktyką do celów administracyjnych).
jjmontes
Możesz także edytować plik / etc / hosts, aby został poprawnie przekształcony w adres.
dtoubelis
2
Nie możesz zmienić nazwy hosta w działającym kontenerze za pomocą hostname(brak możliwości). Uruchomienie docker run -h <hostname> <image> <container-name>tworzy nowy kontener o podanej nazwie hosta.
dangonfast
6

Zatrzymaj pojemnik i obsługę

sudo docker stop CONTAINER_NAME
sudo service docker stop

Edytuj plik konfiguracyjny (JSON) [Najpierw wykonaj kopię zapasową]

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

Zastąpić

„Nazwa hosta”: „WHATEVER”

z

„Nazwa hosta”: „NEW_HOSTNAME”

Uruchom kontener i serwis

sudo service docker start
sudo docker start CONTAINER_NAME

(Opcjonalnie możesz także dołączyć dokera)

sudo docker attach CONTAINER_NAME

Szczegółowe informacje na temat dokerów (tj. CONTAINER_NAME, CONTAINER_ID) można uzyskać, uruchamiając

sudo docker ps -a
Tomot
źródło
nie działa nadpisywane za każdym razem, gdy uruchamiam pojemnik.
Ahmed,
to jest dziwne. Właśnie odtworzyłem te kroki i nadal działa. wersja dokera 1.7.1. czy na pewno zamknąłeś kontener i serwis przed edycją pliku?
Tomot
Działa na Docker 17.04.0-ce, gdy edycja / etc / hostname nie. Jeśli jeszcze nie utworzyłeś kontenera, druga odpowiedź z opcją -h jest lepsza, ale w moim przypadku już miałem problem z konfiguracją kontenera i nie chciałem go odtworzyć, aby ustawić nazwę hosta.
Una
Nie działaDocker version 17.05.0-ce, build 89658be
Dangonfast
4

Ponowne uruchomienie kontenera byłoby najłatwiejszą opcją - ale możesz także edytować / etc / hostname i przejść od tego miejsca.

James V.
źródło
Edycja /etc/hostnamenie ma żadnego efektu po ponownym uruchomieniu, ponieważ jest nadpisywana za każdym razem „prawdziwą” nazwą hosta zarządzaną przez dokera. Nie możesz uruchomić hostnamena kontenerze, ponieważ kontener nie ma możliwości tej operacji (domyślnie i nie chcesz tego zmieniać)
Dangonfast,
A edycja /etc/hostnamei nie restartowanie kontenera nie ma sensu.
dangonfast
1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces opisuje sposób na zrobienie tego. Podstawową ideą jest użycie docker inspectpid dla kontenera, a następnie wprowadzenie przestrzeni nazw kontenera za pośrednictwem nsenter. Uruchomienie hostnamew tym obszarze nazw spowoduje zmianę nazwy hosta dla instancji dokera, która udostępnia tę przestrzeń nazw.

Chaim Geretz
źródło
2
dodaj rozwiązanie bezpośrednio tutaj, a nie zewnętrzny link, który może zniknąć
Orphans
0

Jak zauważyło kilku innych, można to zmienić w przypadku kontenerów, modyfikując config.v2.jsonplik.

Tylko upewnij się, że usługa Docker jest zatrzymana przed edycją pliku, w przeciwnym razie będzie to OVERWRITTEN. Kroki MUSZĄ zostać wykonane w tej kolejności

  • Zatrzymaj pojemnik
  • Zatrzymaj usługę dokowania
  • Zmodyfikuj /var/lib/docker/containers/CONTAINER_ID/config.v2.jsonplik - -

  • Uruchom usługę Docker

  • Uruchom pojemnik

Zostało to potwierdzone, działając dla mnie na Docker v17.05.0-ce, na kontenerze przy użyciu --net=host. Modyfikacja /etc/hostnamepliku nie działa, a plik jest po prostu nadpisywany.

użytkownik1270949
źródło
-3

W

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

znajdź i ustaw

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}
Oleg Neumyvakin
źródło
Nie działa Docker version 17.05.0-ce, build 89658be. Config zostaje nadpisany, kto wie skąd. A sama nazwa hosta nie zmienia się po ponownym uruchomieniu.
dangonfast