4
respostas

Acessar contêiner pelo IP interno.

Olá! Preciso atribuir IP's para meus contêineres. Meu servidor docker está em uma rede 192.168.0.0/22 (IP do servidor docker 192.168.3.201) Criei uma rede docker com subnet 192.168.50.0/24 e gateway 192.168.50.1

Ao rodar meu contêiner nesta rede consigo atribuir o IP 192.168.50.2 porem para acessar minha aplicação que está rodando só consigo pelo IP do servidor (192.168.3.201).

Existe alguma forma de conseguir acessar a aplicação pelo IP do contêiner? Consigo acesso da minha rede para a rede do docker?

4 respostas

Olá, Fernando!

Parece que você está lidando com uma questão de roteamento entre a sua rede principal e a rede Docker que você criou. Vamos tentar resolver isso!

Primeiro, é importante verificar se o roteamento entre a sua rede principal (192.168.0.0/22) e a rede Docker (192.168.50.0/24) está configurado corretamente. Isso é essencial para permitir que dispositivos fora do servidor Docker acessem os contêineres diretamente pelo IP interno.

Uma solução comum é garantir que o roteamento IP esteja habilitado no servidor Docker. Você pode verificar isso executando o seguinte comando no servidor Linux:

sysctl net.ipv4.ip_forward

Se o resultado for net.ipv4.ip_forward = 0, então o encaminhamento de IP está desativado. Para habilitá-lo temporariamente, você pode executar:

sudo sysctl -w net.ipv4.ip_forward=1

Para tornar essa alteração permanente, adicione ou modifique a linha net.ipv4.ip_forward = 1 no arquivo /etc/sysctl.conf e depois aplique as alterações com sudo sysctl -p.

Além disso, você precisará garantir que não existem regras de firewall bloqueando o tráfego entre essas redes. Verifique as regras do iptables ou qualquer firewall que você esteja utilizando. Uma regra permissiva poderia ser algo como:

sudo iptables -A FORWARD -s 192.168.0.0/22 -d 192.168.50.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.50.0/24 -d 192.168.0.0/22 -j ACCEPT

Isso permite o tráfego de ida e volta entre as redes. Lembre-se de ajustar as regras conforme necessário para o seu ambiente específico.

Por fim, certifique-se de que a rede Docker está configurada para permitir a comunicação externa. Isso geralmente é gerenciado na configuração da rede quando você a cria com o Docker.

Essas são algumas diretrizes gerais e podem precisar de ajustes específicos para o seu ambiente. Espero que essas sugestões ajudem a resolver o problema de acessar seus contêineres pelo IP interno.

Bons estudos!

Oi, Fernando, tudo certo com você?

Isso pode acontecer devido a várias razões, incluindo configurações de firewall, rotas de rede ou mesmo a forma como a rede Docker está configurada em relação à sua rede principal.

Uma solução que posso te recomendar é garantir que a rota entre sua rede principal e a do Docker esteja estabelecida da maneira certa.

Você pode adicionar uma rota estática no seu roteador (ou no servidor que atua como gateway para essas redes).

No Linux, você pode usar este comando com o Bash:

sudo ip route add 192.168.50.0/24 via 192.168.3.201

Ele basicamente diz ao sistema para enviar todo o tráfego destinado à rede 192.168.50.0/24 para o gateway 192.168.3.201, que é o IP do seu servidor Docker. Assim os dispositivos vão se comunicar diretamente com os IPs internos dos contêineres.

E, também, dá uma olhadinha nas configurações de firewall do servidor no Docker, tá bem? Você pode precisar adicionar regras para permitir o tráfego para os IPs específicos dos contêineres ou para a rede Docker como um todo.

Se outra dúvida surgir, estamos aqui :)

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Olá! Para evitar problemas com minha rede resolvi criar uma rede classe A no docker: docker network create --subnet=10.200.200.0/24 --gateway=10.200.200.1 redeDocker10

depois rodei o contêiner atribuindo um IP: docker run --network=redeDocker10 --ip=10.200.200.2 -d -p 8010:8010 doc-cupom

Ao executar o comando solicitado pelo Lucas o resultado foi: net.ipv4.ip_forward = 1

Mesmo colocando outra máquina da minha rede na classe A não consigo pingar para o IP 10.200.200.2 Minha aplicação continua sendo acessada pelo IP do servidor onde o docker esta instalado: http://192.168.3.201:8010/cupom/login.html

Não tenho firewall neste servidor (192.168.3.201)

Oii, Fernando, tudo bem?

Desculpe a demora.

É um pouco difícil dar um direcionamento para o seu caso, pois não temos acesso.

Contudo, vou deixar aqui algumas recomendações que possam te ajudar:

  • Verificar o roteamento: você precisa verificar se o roteador principal está configurado para rotear o tráfego para a rede Docker.

  • Desativar o firewall ou alterar as regras para o firewall permitir o tráfego para a porta 8010 no Docker (que foi a porta configurada por você).

  • Usar ferramentas de diagnóstico como o Wireshark ou o Traceroute -- como comentei anteriormente, sem acesso ao que está acontecendo de forma direta, é um pouco complexo dar uma solução cirúrgica. Por isso uma ferramenta para rastrear o tráfego da máquina para o container possa te ajudar.

Espero que isso te dê uma ajudinha!

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software