3

I'm learning docker 1.8. I wanted to change the hostname of the container after I create them. I tried to edit /etc/host inside the container and got overwritten every time I attach then start the image. I tried to edit the following file, and the hostname gets overwritten.

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

[root@localhost ~]#

None of these answers worked for me

How do you name a docker container?

9

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.

  • Yeah, using commend run is creating a new container. I thought my data are saved every time I exit the container and run it again. – Ahmed Aug 28 '15 at 16:55
4

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"!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.