Alterar o nome do contêiner em execução com host Ubuntu 16.04.4 LTS

Alterar o nome do contêiner em execução com host Ubuntu 16.04.4 LTS

Meu hospedeiro:

» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.4 LTS
Release:    16.04
Codename:   xenial

Minha janela de encaixe:

» docker --version 
Docker version 17.05.0-ce, build 89658be

O que eu tentei:

1) Definir o nome do host no contêiner: falha porque o contêiner não possui os recursos corretos

root@172:/# hostname something
hostname: you must be root to change the host name

2) Edição manual /etc/hostnameno contêiner: não tem efeito após a reinicialização do contêiner e não tem finalidade sem reinicialização.

3) Editar manualmente a configuração do contêiner: não funciona, não faço ideia do porquê.

sudo vi /var/lib/docker/containers/834787a141d73b359814055b5fc0ba3e1cc52effeb6f916e2adece297d600772/config.v2.json

4) Alterar o nome do host do contêiner no host usando ferramentas de namespaces, conforme descritoaqui: não é possível Ubuntu 16.04.4 LTSporque não tenho acesso às ferramentas de namespaces.

Que outras opções eu tenho?

Justificativa

O GitLab parece passar seu nome de host atual para um executor do GitLab para clonar repositórios. Na rede padrão, o container não pode ser acessado pelo nome, apenas pelo endereço IP. Isso significa que preciso definir o nome do host do contêiner gitlab para o endereço IP, mas só tenho o endereço IP quando ele já estiver em execução. A única solução é, portanto:

  1. Execute o contêiner
  2. Descubra seu endereço IP
  3. Substitua o nome do host pelo endereço IP
  4. Agora o gitlab e o gitlab runner podem conversar entre si

A outra opção (limpa) seria iniciar os containers (gitlab e gitlab-runner) em uma rede customizada, para que eles possam ser acessados ​​pelo nome de host real, mas atualmente tenho o problema de que os containers iniciados pelo gitlab runner não são capaz de alcançar os serviços de contêiner necessários gerados pelo executor ao usar redes personalizadas.

Responder1

Resposta errada para o seu problema, mas a resposta que você está pedindo:

Você pode definir o nome do host ao criar o contêiner com uma opção, por exemplo:

docker run --hostname example.com image_name

Por que esta é a resposta errada? Porque você deveria tratar o contêiner como gado, não como um animal de estimação nomeado. Ajuste o gitlab e o executor para usar o nome do serviço se você estiver executando seus contêineres como uma pilha swarm ou com docker compose. Ou se você estiver iniciando contêineres com docker run, poderá usar o nome do contêiner, embora eu recomende mudar para um serviço o mais rápido possível para facilitar as atualizações.


Para uma solução ainda pior para o problema acima, você pode adicionar recursos ao contêiner para permitir que ele altere seu próprio nome de host de dentro do contêiner. Isto está criando vulnerabilidades de segurança e não é recomendado para nenhum ambiente onde a segurança seja importante:

docker run --cap-add SYS_ADMIN ...

Responder2

Para facilitar a atualização, faça-o na máquina host do docker. Use opções como esta com seus comandos docker run.

-v ./hosts:/etc/hosts -v ./hostname:/etc/hostname

Você poderá atualizar o arquivo na máquina host sem precisar entrar no contêiner e atualizar o arquivo.

informação relacionada