Como altero o nome do host do docker após a criação da imagem?

3

Estou aprendendo o docker 1.8. Eu queria mudar o nome do host do container depois eu os criei. Tentei editar /etc/host dentro do contêiner e fui substituído toda vez que attach e start da imagem. Tentei editar o seguinte arquivo e o nome do host foi substituído.

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

[root @ localhost ~] #

Nenhuma dessas respostas funcionou para mim

Como você nomeia um contêiner docker?

    
por Ahmed 25.08.2015 / 20:21

2 respostas

7

Não tenho certeza se você quer dizer que deseja definir o nome do host de um novo contêiner ou de um contêiner em execução. Você diz que quer fazer isso depois de criar o container, mas também diz que está "iniciando a imagem". Se você não tiver start ed a imagem, você ainda não criou o contêiner - um contêiner é o que você obtém quando inicia uma imagem.

Você está criando um novo contêiner

Você pode definir o nome do host na linha de comando:

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

Seu contêiner já está em execução

Isso é mais difícil. Você vai querer ficar de olho em este problema do Docker mas até que esteja resolvido você não pode fazer muito mais do que para editar /etc/hosts eu acho. O comando hostname não funcionará.

    
por 27.08.2015 / 11:16
2

Para alterar o nome do host de um contêiner em execução, você pode usar o comando "nsenter". Você terá que ser root no host, no entanto.

Podemos listar os namespaces no host com o comando "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

Aqueles com pid 1785 são meu contêiner docker. O tipo de namespace que lida com os nomes dos hosts é "uts", então vamos executar o nome do host nesse namespace:

# nsenter --target 1785 --uts hostname foo

Agora, "hostname" no seu contêiner deve render "foo"!

    
por 19.08.2016 / 22:40

Tags