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

Как изменить имя хоста докера после создания образа?

Изучаю докер 1.8. Я хотел изменить имя хоста контейнера после Я их создаю. Я пытался редактировать /etc/host внутри контейнера и перезаписывались каждый раз, когда я attach затем start изображение. Я попытался отредактировать следующий файл, но имя хоста было перезаписано.

[root@localhost ~]# docker inspect high_blackwell | grep hostname
"HostnamePath": "/var/lib/docker/containers/15b84f7012383b1af2d4c8c6443506cdff3b19cb1d87d3dfdcb10df126c4eec3/hostname",

[root @ localhost ~] #

Ни один из этих ответов не помог мне

Как вы называете докер-контейнер?

Я не уверен, имеете ли вы в виду, что хотите установить имя хоста для нового контейнера или для работающего контейнера. Вы говорите, что хотите сделать это после создания контейнера, но затем вы также говорите, что «запускаете изображение». Если у вас нет started изображение, которое вы еще не создали, контейнер - контейнер - это то, что вы получаете, когда запускаете изображение.

Вы создаете новый контейнер

Вы можете установить имя хоста в командной строке:

docker run --rm -h "example.com" -t -i ubuntu bash
# ...
root@example:/# hostname
example.com

Ваш контейнер уже запущен

Это сложнее. Вы захотите следить за эта проблема с докером но пока он не решен, вы ничего не можете сделать, кроме как редактировать /etc/hosts Думаю. В hostname команда не будет работать.

Чтобы изменить имя хоста работающего контейнера, вы можете использовать команду «nsenter». Однако вам нужно будет иметь root-права на хосте.

Мы можем вывести список пространств имен на хосте с помощью команды «lsns»:

# lsns
        NS TYPE  NPROCS   PID USER COMMAND
4026531836 pid       73     1 root init      
4026531837 user     101     1 root init      
4026531838 uts       73     1 root init      
4026531839 ipc       73     1 root init      
4026531840 mnt       72     1 root init      
4026531857 mnt        1    14 root kdevtmpfs
4026531957 net       73     1 root init      
4026532300 mnt       28  1785 root /usr/bin/python /usr/local/bin/supervisord -c
4026532301 uts       28  1785 root /usr/bin/python /usr/local/bin/supervisord -c
4026532302 ipc       28  1785 root /usr/bin/python /usr/local/bin/supervisord -c
4026532303 pid       28  1785 root /usr/bin/python /usr/local/bin/supervisord -c
4026532305 net       28  1785 root /usr/bin/python /usr/local/bin/supervisord -c

Те, у которых pid 1785, - это мой док-контейнер. Тип пространства имен, который обрабатывает имена хостов, - «uts», поэтому давайте запустим имя хоста в этом пространстве имен:

# nsenter --target 1785 --uts hostname foo

Теперь "hostname" в вашем контейнере должно давать "foo"!