Por padrão, o contêiner pode acessar ativamente a conexão com a rede externa, mas a rede externa não pode acessar o contêiner.
Acesso ao contêiner para implementação externa
Para todas as conexões do contêiner à rede externa, o endereço de origem será conectado ao endereço IP do sistema local. Isso é feito usando iptables
o endereço de origem da operação de camuflagem para alcançar.
Verifique as regras de NAT do host.
$ sudo iptables -t nat -nL
...
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16
...
Onde o endereço de origem de todas as regras no 172.17.0.0/16
segmento de rede, o outro segmento é um tráfego de endereço de destino (rede externa) enviado mascarado como uma placa de sistema dinâmica. A vantagem do MASQUERADE e do SNAT tradicional é que ele pode obter dinamicamente o endereço da placa de rede.
Implementação de contêiner de acesso externo
Os contêineres permitem acesso externo, você pode docker run
passar o tempo -p
ou -P
parâmetro para habilitar.
Independentemente do tipo de forma, é na verdade no local iptable
adicionar as regras correspondentes da tabela nat.
Use -P
quando:
$ iptables -t nat -nL
...
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:49153 to:172.17.0.2:80
Use -p 80:80
quando:
$ iptables -t nat -nL
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80
Nota:
- A regra aqui mapeia 0.0.0.0, o que significa que o host aceitará o tráfego de todas as interfaces. Os usuários podem
-p IP:host_port:container_port
ou-p IP::port
especificar o IP permitido, a interface no host de acesso ao contêiner, de modo a introduzir regras mais rígidas. - Se você deseja vincular-se permanentemente a um endereço IP fixo, pode usar o arquivo de configuração do Docker
/etc/default/docker
para especificar aDOCKER_OPTS="--ip=IP_ADDRESS"
reinicialização após o serviço Docker entrar em vigor.