É fácil tornar um serviço hospedado no Docker acessível apenas a outros contêineres no mesmo host. Se vocês:
- Defina o servidor para vincular ou escutar em 0.0.0.0 ou ::0 (todos os endereços);
- Crie uma rede do Docker não padrão (o Docker Compose fará isso automaticamente);
- Inicie o contêiner do servidor e qualquer contêiner de cliente associado nessa rede do Docker (o Docker Compose fará isso por padrão); e
- Não não defina um
docker run -p
ou Docker Composeports:
opção
então os contêineres do cliente podem alcançar o contêiner do servidor usando seu nome de contêiner como um nome de host, mas os processos não-Docker no host e outros hosts não podem alcançar o servidor.
Se o seu host tiver várias interfaces de rede e a vinculação a uma delas tornaria um serviço "privado", você poderá fazer a mesma coisa com
docker run -p
. Se o seu host tiver o endereço IP público 10.20.30.40/16 e também o endereço IP privado 192.168.144.128/24, então docker run -p 192.168.144.128:6379:6379
irá disponibilizá-lo para a rede privada (e outros contêineres do Docker como acima), mas não para a rede pública. (O próprio servidor, dentro do contêiner, ainda precisa se vincular a 0.0.0.0.) Se você precisar que o servidor seja visível fora do host, mas apenas para alguns endereços IP, acho que você precisa de
iptables
mágica que não é nativa do Docker.