Estou tendo problemas para definir o nome do host em um contêiner de estivador em execução. Também estou com problemas para entender como especificar o nome do host após o início da imagem.
Iniciei um contêiner a partir de uma imagem que baixei:
sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss
Mas eu esqueci de especificar o nome do host -h
; como posso especificar o nome do host agora que o contêiner está em execução?
run
uma imagem, não quando inicia um contêiner.docker restart
documentaçãoRespostas:
A edição
/etc/hostname
é uma coisa para a qual você precisa de acesso ssh dentro do contêiner. Caso contrário, você pode girar o contêiner com a-h
opçãoPara definir os nomes de host e domínio:
fonte
docker exec /bin/bash
em um contêiner em execução, não precisar instalarssh
(o que é uma prática recomendada para fins de administração).hostname
(recurso ausente). A execuçãodocker run -h <hostname> <image> <container-name>
cria um novo contêiner com o nome do host fornecido.Pare o contêiner e o serviço
Editar arquivo de configuração (JSON) [Você deve fazer o backup primeiro]
/var/lib/docker/containers/CONTAINER_ID/config.json
Substituir
com
Iniciar contêiner e serviço
(Opcionalmente, você também pode conectar a janela de encaixe)
Detalhes sobre janelas de encaixe (por exemplo, CONTAINER_NAME, CONTAINER_ID) podem ser obtidos executando
fonte
Docker version 17.05.0-ce, build 89658be
Reiniciar o contêiner seria a opção mais fácil - mas você também pode editar / etc / hostname e partir daí.
fonte
/etc/hostname
não tem efeito após a reinicialização, pois é substituída todas as vezes pelo nome do host "real", gerenciado pelo docker. Você não pode executarhostname
no recipiente, uma vez que o recipiente não tem recursos para essa operação (por padrão, e você não quer mudar isso)/etc/hostname
e não reiniciar o contêiner não tem propósito.Caso você use
--net=host
, não poderá alterar o nome do host de-h
ou de dentro da janela de encaixe.Consulte https://github.com/docker/docker/issues/5708
fonte
https://evolvingweb.ca/blog/changing-docker-hostnames-namespaces descreve uma maneira de fazer isso. A idéia básica é usar
docker inspect
para obter o pid do contêiner e, em seguida, insira o namespace uts do contêiner viansenter
. A execuçãohostname
dentro desse espaço para nome altera o nome do host da instância do docker que compartilha esse espaço para nome.fonte
Como algumas outras pessoas apontaram, isso pode ser alterado para contêineres modificando o
config.v2.json
arquivo.Apenas certifique-se de que o serviço Docker esteja parado antes da edição do arquivo, caso contrário, SERÁ OVERWRITTEN. Os passos DEVEM ser feitos nesta ordem
Modifique o
/var/lib/docker/containers/CONTAINER_ID/config.v2.json
arquivo - -Iniciar o serviço Docker
Isso foi confirmado para mim no Docker v17.05.0-ce, em um contêiner usando
--net=host
. Modificar o/etc/hostname
arquivo não funciona e o arquivo é substituído.fonte
No
encontrar e definir
fonte
Docker version 17.05.0-ce, build 89658be
. O Config é substituído, quem sabe de onde. E o nome do host em si não muda após a reinicialização.