У меня проблемы с настройкой имени хоста на работающем докере. У меня также возникают проблемы с пониманием, как указать имя хоста после запуска образа.
Я запустил контейнер из изображения, которое я скачал:
sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss
Но я забыл указать имя хоста через -h
; Как я могу указать имя хоста теперь, когда контейнер работает?
run
изображение, а не когда вы запускаете контейнер.docker restart
документацииОтветы:
Редактирование
/etc/hostname
- это одна вещь, для которой вам нужен ssh-доступ внутри контейнера. В противном случае, вы можете раскрутить контейнер с-h
опцией.Чтобы установить имена хостов и доменов:
источник
docker exec /bin/bash
на работающем контейнере, не нужно устанавливатьssh
(что плохо для администрирования).hostname
(отсутствует возможность). Запускdocker run -h <hostname> <image> <container-name>
создает новый контейнер с заданным именем хоста.Остановить контейнер и обслуживание
Редактировать файл конфигурации (JSON) [Сначала вы должны сделать резервную копию]
/var/lib/docker/containers/CONTAINER_ID/config.json
замещать
с участием
Запустить контейнер и сервис
(При желании вы также можете прикрепить докер)
Подробную информацию о докерах (например, CONTAINER_NAME, CONTAINER_ID) можно получить, запустив
источник
Docker version 17.05.0-ce, build 89658be
Перезапуск контейнера был бы самым простым вариантом - но вы также можете отредактировать / etc / hostname и перейти оттуда.
источник
/etc/hostname
имеет никакого эффекта после перезапуска, так как оно каждый раз перезаписывается «реальным» именем хоста, управляемым Docker. Вы не можете запуститьhostname
контейнер, так как контейнер не имеет возможностей для этой операции (по умолчанию, и вы не хотите это менять)/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 остановлена до того, как файл будет отредактирован, иначе он будет перезаписан. Шаги ДОЛЖНЫ быть выполнены в этом порядке
Изменить - -
/var/lib/docker/containers/CONTAINER_ID/config.v2.json
- файлЗапустите сервис Docker
Это было подтверждено для меня на Docker v17.05.0-ce, на контейнере с использованием
--net=host
. Изменение/etc/hostname
файла не работает, и файл просто перезаписывается.источник
В
найти и установить
источник
Docker version 17.05.0-ce, build 89658be
. Конфиг перезаписывается, кто знает откуда. И само имя хоста не меняется после перезапуска.