如何为正在运行的容器指定主机名?

Mig*_*ing 63 linux lxc docker

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

我从我下载的图像启动了一个容器:

sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss
Run Code Online (Sandbox Code Playgroud)

但是我忘了通过-h;指定主机名 既然容器正在运行,我该如何指定主机名?

小智 56

编辑/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
Run Code Online (Sandbox Code Playgroud)

  • 您可以在正在运行的容器上执行 `docker exec /bin/bash`,无需安装 `ssh`(恕我直言,这对于管理而言是一种不好的做法)。 (6认同)
  • 您无法使用“主机名”(缺少功能)更改正在运行的容器中的主机名。运行`docker run -h <hostname> <image> <container-name>` 创建一个具有给定主机名的 *new* 容器。 (5认同)

小智 7

停止容器和服务

sudo docker stop CONTAINER_NAME
sudo service docker stop
Run Code Online (Sandbox Code Playgroud)

编辑配置文件 (JSON) [你应该先备份]

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

代替

“主机名”:“随便”

"主机名":"NEW_HOSTNAME"

启动容器和服务

sudo service docker start
sudo docker start CONTAINER_NAME
Run Code Online (Sandbox Code Playgroud)

(可选地,您也可以附加 docker)

sudo docker attach CONTAINER_NAME
Run Code Online (Sandbox Code Playgroud)

可以通过运行获得有关dockers的详细信息(即CONTAINER_NAME,CONTAINER_ID)

sudo docker ps -a
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您使用,--net=host则无法-h在 docker 中更改主机名或从 docker 内部更改主机名。

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


小智 5

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