Назад | Перейти на главную страницу

Как указать имя хоста для работающего контейнера?

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

Я запустил контейнер из загруженного мной образа:

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

Но я забыл указать имя хоста через -h; как я могу указать имя хоста теперь, когда контейнер запущен?

редактировать /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

Остановить контейнер и сервис

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

Самый простой вариант - перезапустить контейнер, но вы также можете отредактировать / etc / hostname и продолжить работу оттуда.

Если вы используете --net=host тогда вы не можете изменить имя хоста с -h или из докера.

Видеть https://github.com/docker/docker/issues/5708

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

Как отмечали некоторые другие, это можно изменить для контейнеров, изменив config.v2.json файл.

Перед редактированием файла убедитесь, что служба Docker остановлена, иначе он будет ПЕРЕЗАПИСАН. Шаги ДОЛЖНЫ выполняться в таком порядке.

  • Остановите контейнер
  • Остановите службу Docker
  • Измените - /var/lib/docker/containers/CONTAINER_ID/config.v2.json - файл

  • Запустите службу Docker

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

Подтверждено, что это работает для меня на Docker v17.05.0-ce, в контейнере, использующем --net=host. Изменение /etc/hostname файл не работает, и файл просто перезаписывается.

В

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

найти и установить

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