AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1738103
Accepted
StoneThrow
StoneThrow
Asked: 2022-08-21 15:49:15 +0800 CST2022-08-21 15:49:15 +0800 CST 2022-08-21 15:49:15 +0800 CST

Qual é a relação entre interfaces e portas entre um PC host e o contêiner do Docker?

  • 772

Premissa:

Estou tentando reunir o aprendizado recente sobre interfaces e portas de rede e tentar vincular esse novo aprendizado ao Docker.

Um resumo rápido das coisas que aprendi relevantes para esta pergunta:

  • Cada computador pode ter vários endereços IP, um para cada interface de rede.
  • Os endereços IP são atribuídos a interfaces, não a computadores, etc.
  • Um soquete é uma porta IP+.
  • O DHCP é frequentemente/provavelmente o que atribui um endereço IP a uma interface.

Assim como em muitos aspectos do trabalho com software, primeiro faço as coisas de acordo com o "ritual" que aprendo, porque "é assim que se faz". Então, com o tempo e a experiência, começo a ponderar e investigar os porquês. Então, eu gostaria de amarrar esse novo aprendizado com o Docker.

O "ritual" que aprendi é que, se um aplicativo em contêiner estiver ouvindo em um soquete TCP, você precisa "expor" a porta desse soquete para que o tráfego que chega a uma das interfaces do host nessa porta seja "encaminhado" para o recipiente.
Por exemplo docker run -d -p 81:80 httpd, configura as coisas para que, se eu apontar meu navegador da Web para 127.0.0.81, esse tráfego HTTP/TCP/IP seja "encaminhado" para a porta 80 do contêiner httpd .

Então, quando eu aponto meu navegador da web para 127.0.0.1:81, vejo a mensagem "Funciona!" mensagem.

Mas também: se eu apontar meu navegador para 127.0.0. 2:81 ou 127.0.0 . 16 :81, então também vejo o "Funciona!" mensagem.

Como aprendi com as postagens vinculadas, o DHCP atribuiu à interface da minha NIC o endereço IP 10.0.0.17 e, se eu apontar meu navegador para 10.0.0.17:81, aqui novamente, vejo o "Funciona!" do Apache! mensagem.
Também funciona se eu apontar o navegador da web de outro PC na mesma rede para 10.0.0.17:81.


Pergunta:

Minha pergunta principal é: para qual das interfaces do PC host (endereços IP) as portas são encaminhadas do host para o contêiner quando você faz docker runcom o -pargumento? Pela observação observada, a resposta parece ser "todas as interfaces" - é esse o caso?

Mais amplamente, porém: qual é a relação entre interfaces e portas entre um PC host e o contêiner Docker?


O que eu tentei

Eu tentei ler o docker runtexto de ajuda, mas seu texto -pnão está em um nível que eu possa relacioná-lo com as perguntas que estou fazendo:

-p, --publish list Publica a(s) porta(s) de um contêiner no host

Eu tentei executar olhando no ifconfigcontexto do meu PC e o contêiner httpd em execução.
ifconfigno PC host:

$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:caff:fe23:f0f4  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ca:23:f0:f4  txqueuelen 0  (Ethernet)
        RX packets 3079  bytes 322688 (322.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6429  bytes 15942682 (15.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 17975  bytes 1557651 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17975  bytes 1557651 (1.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.17  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::5f8c:c301:a6a3:6e35  prefixlen 64  scopeid 0x20<link>
        ether f8:59:71:01:89:cf  txqueuelen 1000  (Ethernet)
        RX packets 1672559  bytes 2237440808 (2.2 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 726083  bytes 113598143 (113.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifconfigno contêiner httpd em execução (instalei-o com apt-get):

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 1326  bytes 8916833 (8.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1134  bytes 76866 (75.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Colocando essa questão no contexto da ifconfigsaída acima, qual é a relação entre essas interfaces no PC host e as interfaces no contêiner docker?
A partir daqui , meu entendimento é que o DHCP atribuiu 10.0.0.17 à NIC no meu PC host. Mas de onde vem o 172.17.0.3?

networking port-forwarding
  • 1 1 respostas
  • 35 Views

1 respostas

  • Voted
  1. Best Answer
    Spiff
    2022-08-21T17:51:23+08:002022-08-21T17:51:23+08:00

    [NB: Você parece ter três perguntas aqui, pelo menos uma das quais é muito ampla para ter uma resposta clara e aceitável. Geralmente, o SuperUser funciona melhor se você fizer apenas uma pergunta definida por postagem de pergunta.]

    Minha pergunta principal é: para quais interfaces do PC host (endereços IP) as portas são encaminhadas do host para o contêiner quando você executa o docker com o argumento -p? Pela observação observada, a resposta parece ser "todas as interfaces" - é esse o caso?

    Sim.

    Mais amplamente, porém: qual é a relação entre interfaces e portas entre um PC host e o contêiner Docker?

    Isso é um pouco amplo demais para responder bem sem apontar para a documentação de rede do Docker. O Docker contém muitas opções de rede diferentes que alteram as relações entre interfaces e portas entre PCs host e contêineres do Docker. É muito flexível.

    Mas de onde vem o 172.17.0.3?

    O modo de rede padrão do Docker, bridge networking , cria uma ponte de software (como um switch Ethernet virtual) no host e conecta os contêineres a ele por meio de interfaces de rede virtual. Como uma pequena LAN Ethernet virtual, tudo dentro do host. Em seguida, ele usa NAT (como um roteador de gateway doméstico usaria) para permitir que seus contêineres alcancem a rede além do host. O NAT usa a sub-rede 172.17.0.0/16 como sua sub-rede privada.

    O Docker usa essa sub-rede porque ela faz parte do espaço de endereço privado RFC 1918, assim como 192.168.0.0/16, 10.0.0.0/8 e o restante de 172. 16 .0.0/ 12 .

    Parece que o Docker configura programaticamente os contêineres com endereços estáticos nessa sub-rede (o DHCP complicaria desnecessariamente as coisas).

    • 1

relate perguntas

  • A conexão do usuário ao servidor SFTP usando o FileZilla se recusa a conectar

  • Como funciona um NAT atrás de um NAT (NAT do roteador e NAT do ISP)?

  • Win10 1803: Como tornar o ponto de acesso móvel uma rede privada?

  • Como o nc identifica nomes de serviço

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve