Qual é o ponto do processo Docker-proxy? Por que um proxy TCP do userspace é necessário?

Notei que há processo docker-proxy em execução para cada porta publicada. Qual é o objetivo desse processo? Por que um proxy tcp de espaço do Usuário é necessário para isso?

$ ps -Af | grep proxyroot      4776  1987  0 01:25 ?        00:00:00 docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 22222 -container-ip 172.17.0.2 -container-port 22root      4829  1987  0 01:25 ?        00:00:00 docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 5555 -container-ip 172.17.0.3 -container-port 5555

e algumas regras iptable relacionadas criadas pelo docker:

$ sudo iptables -t nat -L -n -vChain PREROUTING (policy ACCEPT 1 packets, 263 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT 1 packets, 263 bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy ACCEPT 1748 packets, 139K bytes) pkts bytes target     prot opt in     out     source               destination            32  7200 DOCKER     all  --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT 1719 packets, 132K bytes) pkts bytes target     prot opt in     out     source               destination            32  7200 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0           Chain DOCKER (2 references) pkts bytes target     prot opt in     out     source               destination             0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            127.0.0.1            tcp dpt:22222 to:172.17.0.2:22    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            127.0.0.1            tcp dpt:5555 to:172.17.0.3:5555

Aparentemente, existem alguns casos de borda sem uma solução alternativa melhor (por enquanto):

  • >localhost & lt;-roteamento localhost
  • instância docker chamando para si através de sua porta publicada
  • e possivelmente mais

https://github.com/docker/docker/issues/8356

Atualização: desde 1.7.0 (2015-06-16), o proxy userland pode ser desativado em favor do hairpin NAT usando a bandeira --userland-proxy=false do daemon.

Discordo de fechar esta questão. É uma questão arquitetônica válida que é um desdobramento de ssh - Restricting the network access of Docker container - Server Fault ; se estamos votando para baixo o que parece ser uma parte*não * documentada (pelo menos no site) do serviço, então isso levanta a questão, devemos simplesmente andar por aí instalando cegamente serviços novos e brilhantes dos quais não entendemos o funcionamento interno?

Também assim Why does Docker run so many processes to map ports though to my application? - Stack Overflow