我在运行的Docker容器上设置主机名时遇到问题。启动映像后,我也无法理解如何指定主机名。
我从下载的图像启动了一个容器:
sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss
但是我忘了通过指定主机名-h
;容器正在运行时,如何指定主机名?
run
使用图像时有效,而在启动容器时则无效。
docker restart
文档
我在运行的Docker容器上设置主机名时遇到问题。启动映像后,我也无法理解如何指定主机名。
我从下载的图像启动了一个容器:
sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss
但是我忘了通过指定主机名-h
;容器正在运行时,如何指定主机名?
run
使用图像时有效,而在启动容器时则无效。
docker restart
文档
Answers:
编辑/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
docker exec /bin/bash
在运行中的容器上安装,而无需安装ssh
(出于管理目的,这是一种不好的做法)。
hostname
(缺少功能)更改正在运行的容器中的主机名。运行将使用给定的主机名docker run -h <hostname> <image> <container-name>
创建一个新容器。
停止容器和服务
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
(可选地,您也可以附加docker)
sudo docker attach CONTAINER_NAME
可以通过运行获取有关docker的详细信息(即CONTAINER_NAME,CONTAINER_ID)
sudo docker ps -a
Docker version 17.05.0-ce, build 89658be
重新启动容器是最简单的选择-但您也可以编辑/ etc / hostname并从那里开始。
/etc/hostname
重新启动后,编辑无效,因为每次都使用由docker 管理的“真实”主机名覆盖该编辑。您无法hostname
在该容器上运行,因为该容器没有该操作的功能(默认情况下,并且您不想更改该功能)
/etc/hostname
而不重启容器没有任何意义。
如果使用,--net=host
则无法-h
在docker内部或从docker内部更改主机名。
https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces描述了一种方法。基本思想是用于docker inspect
获取容器的pid,然后通过进入容器的uts命名空间nsenter
。hostname
在该名称空间中运行将更改共享该名称空间的Docker实例的主机名。
在
/var/lib/docker/containers/CONTAINER/config.json
查找并设置
"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}
Docker version 17.05.0-ce, build 89658be
。Config被覆盖,谁从哪里知道。重新启动后,主机名本身不会更改。