У меня возникли проблемы с установкой имени хоста в работающем контейнере докера. У меня также возникли проблемы с пониманием того, как указать имя хоста после изображение запускается.
Я запустил контейнер из загруженного мной образа:
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://evolvingweb.ca/blog/changing-docker-hostnames-namespaces описывает способ сделать это. Основная идея - использовать docker inspect
чтобы получить pid контейнера, затем войдите в пространство имен контейнера uts через nsenter
. Бег hostname
внутри этого пространства имен изменит имя хоста для экземпляра докера, который использует это пространство имен.
Как отмечали некоторые другие, это можно изменить для контейнеров, изменив config.v2.json
файл.
Перед редактированием файла убедитесь, что служба 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", ...}