Як вказати ім'я хоста для запущеного контейнера?


51

У мене виникають проблеми з налаштуванням імені хоста на запущений контейнер докера. У мене також виникають проблеми з розумінням того, як вказати ім'я хоста після запуску зображення.

Я запустив контейнер із завантаженого зображення:

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

Але я забув вказати ім'я хоста через -h; як я можу вказати ім'я хоста зараз, коли контейнер працює?


Чи можете ви просто зупинити контейнер і запустити його знову, надаючи ім'я хоста?
dawud

AFAIK, який працює лише тоді, коли ви runстворюєте зображення, а не коли ви запускаєте контейнер.
Мігель Пінг

Іноді все, що вам потрібно, - це побачити команду bash з відповідним іменем. Якщо це так, ви можете відредагувати значення PS1 у .bashrc. Подивіться пропозиції askubuntu.com/a/549150/55365 . У будь-який PS1 ви можете додати (кольорову) рядок, оточений * або #, щоб розставити його з іменем сервера чи служби.
SPRBRN

@dawud ви не можете надати нове ім’я хоста під час docker restart
керування

Відповіді:


48

Редагування /etc/hostname- це одне, для чого вам потрібен доступ до ssh всередині контейнера. В іншому випадку ви можете розкрутити контейнер з -hможливістю.

Щоб встановити імена хоста та домену:

$ 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

5
Можна використовувати docker exec /bin/bashна запущеному контейнері, не потрібно встановлювати його ssh(що є поганою практикою в адміністративних цілях).
jjmontes

Ви також можете відредагувати / etc / hosts, щоб це було правильно вирішено в адресу.
dtoubelis

2
Ви не можете змінити ім'я хоста в запущеному контейнері з hostname(відсутня можливість). Запуск docker run -h <hostname> <image> <container-name>створює новий контейнер із заданим іменем хоста.
dangonfast

6

Зупиніть контейнер та сервіс

sudo docker stop CONTAINER_NAME
sudo service docker stop

Редагувати конфігураційний файл (JSON) [Спершу слід створити резервну копію]

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

Замініть

"Ім'я хоста": "ЯКЩО"

з

"Ім'я хоста": "NEW_HOSTNAME"

Запустіть контейнер та сервіс

sudo service docker start
sudo docker start CONTAINER_NAME

(За бажанням можна також приєднати докер)

sudo docker attach CONTAINER_NAME

Детальну інформацію про докерів (наприклад, CONTAINER_NAME, CONTAINER_ID) можна отримати, запустивши

sudo docker ps -a

не працює. перезаписувати щоразу, коли я запускаю контейнер.
Ахмед

це дивно. Я щойно відтворив ці кроки, і він все ще працює. версія докера 1.7.1. ви впевнені, що ви закрили контейнер і службу, перш ніж редагувати файл?
Томот

Працює на Docker 17.04.0-ce, коли редагування / etc / hostname не відбулося. Якщо ви ще не створили контейнер, інша відповідь з -h - краще, але в моєму випадку я вже пішов з проблемою налаштування контейнера і не хотів відтворити його просто для встановлення імені хоста.
Уна

Не працюєDocker version 17.05.0-ce, build 89658be
dangonfast

4

Перезапуск контейнера було б найпростішим варіантом - але ви можете також відредагувати / etc / hostname та перейти звідти.


Редагування /etc/hostnameне має ефекту після перезавантаження, оскільки воно щоразу переписується "справжнім" ім'ям хоста, яким керується докер. Не можна запускати hostnameконтейнер, оскільки контейнер не має можливостей для цієї операції (за замовчуванням, і ви не хочете цього змінювати)
dangonfast

А редагувати /etc/hostnameта не перезавантажувати контейнер не має мети.
dangonfast


1

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces описує спосіб цього зробити. Основна ідея полягає у використанні docker inspectдля отримання pid контейнера, а потім введіть простір імен uts контейнера через nsenter. Запуск hostnameвсередині цього простору імен змінить ім'я хоста для екземпляра докера, який ділиться цим простором імен.


2
будь ласка, додайте рішення безпосередньо сюди, а не зовнішнє посилання, яке може з’явитися
Діти-сироти

0

Як зазначають декілька інших, це можна змінити для контейнерів, змінивши config.v2.jsonфайл.

Просто переконайтеся, що служба Docker зупинена до редагування файлу, інакше це буде НАДЕЖНО. Кроки ОБОВ'ЯЗКОВО виконати в цьому порядку

  • Зупиніть контейнер
  • Зупиніть послугу Docker
  • Змініть /var/lib/docker/containers/CONTAINER_ID/config.v2.jsonфайл - -

  • Запустіть послугу Docker

  • Запустіть контейнер

Це підтверджено для мене на Docker v17.05.0-ce, використовуючи контейнер --net=host. Змінення /etc/hostnameфайлу не працює, і файл просто перезаписаний.


-3

В

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

знайти і встановити

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

Не працює Docker version 17.05.0-ce, build 89658be. Конфіг перезаписується, хто знає звідки. І саме ім'я хоста не змінюється після перезавантаження.
dangonfast
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.