docker:设置容器的主机名

我在设置正在运行的Docker容器上的主机名时遇到问题。 我也无法理解如何在映像启动指定主机名。

我从我下载的一个图像开始了一个容器:

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 

重新启动容器将是最简单的select – 但是您也可以编辑/ etc / hostname并从那里开始。

停止容器和服务

 sudo docker stop CONTAINER_NAME sudo service docker stop 

编辑configuration文件(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 

如果你使用--net=host那么你不能从-h--net=host里面更改主机名。

https://github.com/docker/docker/issues/5708

https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces描述了一种方法来做到这一点。 基本的想法是使用docker inspect来获取容器的pid,然后通过nsenter进入容器的uts命名空间。 在该名称空间内运行hostname名将更改共享该名称空间的docker实例的主机名。

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

find并设置

 "Config":{"Hostname":"utils","Domainname":"mysite.com", ...}