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 pararegistrator
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!