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

51

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

Я запустил контейнер из изображения, которое я скачал:

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

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

Мигель Пинг
источник
Можете ли вы просто остановить контейнер и запустить его снова, указав имя хоста?
Дауд
AFAIK, который работает только когда вы runизображение, а не когда вы запускаете контейнер.
Мигель Пинг
Иногда все, что вам нужно, это увидеть командную строку bash с правильным именем. Если это так, вы можете отредактировать значение PS1 в .bashrc. Посмотрите на askubuntu.com/a/549150/55365 для предложений. В любой PS1 вы можете добавить (цветную) строку, окруженную * или #, чтобы отделить ее от имени сервера или службы.
СПРБРН
@ dawud вы не можете дать новое имя хоста при запуске docker restart документации
dangonfast

Ответы:

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
amitmula
источник
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

замещать

"Hostname": "WHATEVER"

с участием

"Hostname": "NEW_HOSTNAME"

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

sudo service docker start
sudo docker start CONTAINER_NAME

(При желании вы также можете прикрепить докер)

sudo docker attach CONTAINER_NAME

Подробную информацию о докерах (например, CONTAINER_NAME, CONTAINER_ID) можно получить, запустив

sudo docker ps -a
Tomot
источник
не работает перезаписывать каждый раз, когда я запускаю контейнер.
Ахмед
это странно. Я только что воспроизвел эти шаги, и это все еще работает. Докер версия 1.7.1. Вы уверены, что закрыли контейнер и службу перед редактированием файла?
Tomot
Работает на Docker 17.04.0-ce, когда редактирование / etc / hostname не выполнялось. Если вы еще не создали контейнер, другой ответ с ключом -h лучше, но в моем случае я уже столкнулся с проблемой настройки контейнера и не хотел воссоздавать его просто для установки имени хоста.
Уна
Не работаетDocker version 17.05.0-ce, build 89658be
dangonfast
4

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

Джеймс V
источник
Редактирование не /etc/hostnameимеет никакого эффекта после перезапуска, так как оно каждый раз перезаписывается «реальным» именем хоста, управляемым Docker. Вы не можете запустить 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файла не работает, и файл просто перезаписывается.

user1270949
источник
-3

В

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

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

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}
Олег Неумывакин
источник
Не работает Docker version 17.05.0-ce, build 89658be. Конфиг перезаписывается, кто знает откуда. И само имя хоста не меняется после перезапуска.
dangonfast