How do I change docker host name after the image creation?

Solution 1:

I am not sure if you mean you want to set the hostname of a new container or of a running container. You say you want to do it after creating the container, but then you also say you're "starting the image". If you haven't started the image you haven't yet created the container -- a container is what you get when you start an image.

You're creating a new container

You can set the hostname on the command line:

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

Your container is already running

This is more difficult. You'll want to keep an eye on this Docker issue but until it's resolved you can't do much more than to edit /etc/hosts I think. The hostname command won't work.

Solution 2:

To change the hostname of a running container, you can use the "nsenter" command. You will have to be root on the host, though.

We can list the namespaces on the host with the "lsns" command:

# 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

The ones with pid 1785 are my docker container. The namespace type that handles hostnames is "uts", so let's run hostname in that namespace:

# nsenter --target 1785 --uts hostname foo

Now "hostname" in your container should yield "foo"!

Tags:

Docker