
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/hostname
no 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 LTS
porque 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:
- Execute o contêiner
- Descubra seu endereço IP
- Substitua o nome do host pelo endereço IP
- 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.