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


51

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

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

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

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


您可以停止容器并再次提供一个主机名来启动它吗?
dawud 2014年

AFAIK仅在您run使用图像时有效,而在启动容器时则无效。
Miguel Ping

有时,您想要的只是看到带有正确名称的bash命令提示符。如果是这种情况,您可以在.bashrc中编辑PS1值。请参阅askubuntu.com/a/549150/55365以获取建议。在任何PS1中,您都可以添加一个带*或#的(彩色)字符串,以使其与服务器或服务的名称分开。
SPRBRN

@dawud,在运行docker restart 文档
dangonfast

Answers:


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

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

更换

“主机名”:“随便”

“主机名”:“ 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

不起作用。每次启动容器时都会被覆盖。
艾哈迈德(Ahmed)

那很奇怪。我刚刚复制了这些步骤,它仍然有效。Docker版本1.7.1。确定要在编辑文件之前关闭容器和服务吗?
Tomot 2015年

在未编辑/ etc / hostname的情况下,可在Docker 17.04.0-ce上运行。如果尚未创建容器,则用-h的另一个答案更好,但是在我的情况下,我已经麻烦设置了容器,并且不想为了设置主机名而重新创建它。
Una

不起作用Docker version 17.05.0-ce, build 89658be
dangonfast

4

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


/etc/hostname重新启动后,编辑无效,因为每次都使用由docker 管理的“真实”主机名覆盖该编辑。您无法hostname在该容器上运行,因为该容器没有该操作的功能(默认情况下,并且您不想更改该功能)
dangonfast

编辑/etc/hostname而不重启容器没有任何意义。
dangonfast



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文件不起作用,并且文件被覆盖。


-3

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

查找并设置

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

不起作用Docker version 17.05.0-ce, build 89658be。Config被覆盖,谁从哪里知道。重新启动后,主机名本身不会更改。
dangonfast
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.