Meu cenário: Gostaria de ter meus serviços baseados em docker que sabem o que o IP está chamando da web (um requisito do meu aplicativo).
Eu estou rodando em um VPS em nuvem, debian jessie, com o docker 1.12.2.
Eu uso nc
no modo detalhado para abrir a porta 8080
.
docker run --rm -p "8080:8080" centos bash -c "yum install -y nc && nc -vv -kl -p 8080"
Digamos que o VPS tenha o domínio example.com
e da minha outra máquina, que digamos que tenha o IP dead:::::beef
que eu chamo
nc example.com 8080
O servidor diz:
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8080
Ncat: Listening on 0.0.0.0:8080
Ncat: Connection from 172.17.0.1.
Ncat: Connection from 172.17.0.1:49799.
172.17.0.1
está na rede local do servidor e não tem nada a ver com meu cliente, é claro. Na verdade:
docker0 Link encap:Ethernet HWaddr ....
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
Se eu iniciar o contêiner no modo de rede do host
docker run --rm --net=host -p "8080:8080" centos bash -c "yum install -y nc && nc -vv -kl -p 8080"
e chame meu servidor novamente
nc example.com 8080
Eu obtenho o resultado esperado:
Ncat: Connection from dead:::::beef.
Ncat: Connection from dead:::::beef:55650.
Minhas perguntas são:
nc
em execução no contêiner só vê que a chamada vem do IP do daemon do docker. Tags networking docker