如何在创建镜像后更改docker主机名?

如何在创建镜像后更改docker主机名?

我正在学习docker 1.8。我想更改容器的主机名/etc/host我创建了它们。我尝试在容器内进行编辑,但每次我编辑图像attach时都会被覆盖。我尝试编辑以下文件,但主机名会被覆盖。start

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

[root@localhost ~]#

这些答案对我都不起作用

如何命名 docker 容器?

注意:提出这个问题是因为对 docker 的工作原理缺乏了解。当我问这个问题时,我以为 Docker 就像一个虚拟机。

答案1

我不确定您的意思是要设置新容器的主机名还是正在运行的容器的主机名。您说要在创建容器后执行此操作,但您还说您正在“启动映像”。如果您尚未start编辑映像,则您尚未创建容器——容器就是您启动映像时获得的东西。

您正在创建一个新容器

您可以在命令行上设置主机名:

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

您的容器已在运行

这更难。你需要留意这个 Docker 问题/etc/hosts但我认为,在问题解决之前,您除了编辑之外什么也做不了。该hostname命令不起作用。

答案2

要更改正在运行的容器的主机名,您可以使用“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 的是我的 docker 容器。处理主机名的命名空间类型是“uts”,因此让我们在该命名空间中运行 hostname:

# nsenter --target 1785 --uts hostname foo

现在,容器中的“hostname”应该产生“foo”!

答案3

1.停止容器和服务

sudo docker stop CONTAINER_NAME
sudo service docker stop

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

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

Replace

    "Hostname":"WHATEVER"

with

    "Hostname":"NEW_HOSTNAME"

3.启动容器和服务

sudo service docker start
sudo docker start CONTAINER_NAME

相关内容