Utilizar a interface DNS do consul em contentores docker

3

Eu tenho um agente consul em execução na minha máquina host e alguns serviços em execução dentro de contêineres docker. Estou usando o 'gliderlabs / registrator' para descobrir esses serviços e registrá-los com o cônsul local.

O agente consul está configurado para aceitar conexões de qualquer lugar ( "client_addr": "0.0.0.0" option), o que eu posso "provar" fazendo dig @172.17.42.1 -p 8600 someservice.service.consul da máquina host.

O problema é que não consigo fazer o mesmo de dentro dos contêineres, a solicitação de escavação apenas expira e eu também não consigo curl . Eu passo --dns 172.17.42.1 . Alguma idéia?

Observação: desejo evitar o uso de --net=host , se possível.

Obrigado!

    
por morcmarc 11.06.2015 / 12:22

1 resposta

3

Eu estava atingindo o mesmo obstáculo, e sua configuração e a minha parecem muito semelhantes (estou usando o Consul autônomo em vez de um contêiner Docker).

Também sou contra o uso de --net=host !!!.

O que funcionou no meu caso foi:

a) Criei um config.json para o Consul e, dentro dele, configurei a propriedade ports.dsn para usar a porta 53 (padrão do DNS).

Você não pode usar o 8600 dentro de contêineres do Docker, porque o argumento docker run --dns não permite que você forneça uma porta.

b) Eu usei o IP da LAN (particular) do host como o valor --dns . Eu tentei com outros valores antes ( 0.0.0.0 , IP público e 127.0.0.1 ), mas eles não estavam funcionando.

c) Opcional: Você pode adicionar --dns-search="service.consul" ao docker run para poder ter nomes de domínio mais curtos (ou seja, evite gravar a parte service.consul ).

Uma vez dentro do container, você pode executar um nslookup ubuntu.service.consul , desde que seja o nome do serviço que você tem para esse contêiner.

Notas importantes :

  • Você precisa expor as portas (ou seja, -P ou -p bandeira) no contêiner para registrator para buscá-las. Se você não compartilhar uma porta, registrator ignorará silenciosamente o contêiner.
  • É bom configurar um nome de host (usando -h flag).

Espero que isso ajude!

    
por 23.06.2015 / 19:43