¿Cuál es el punto del proceso docker-proxy? ¿Por qué se necesita un proxy tcp de espacio de usuario?

34

He notado que hay un proceso de Docker-proxy ejecutándose para cada puerto publicado. ¿Cuál es el propósito de este proceso? ¿Por qué se necesita un proxy tcp de espacio de usuario para esto?

$ ps -Af | grep proxy
root      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 22
root      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

y algunas reglas relacionadas de iptable creadas por docker:

$ sudo iptables -t nat -L -n -v
Chain 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 LOCAL

Chain 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 LOCAL

Chain 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
Tarnay Kálmán
fuente
13
No estoy de acuerdo con cerrar esta pregunta. Es un problema arquitectónico válido que es una rama de serverfault.com/questions/615372 ; Si estamos votando a favor de lo que parece ser una parte del servicio no documentada (al menos en el sitio web), entonces eso plantea la pregunta, ¿deberíamos simplemente ir a ciegas instalando servicios nuevos y brillantes que no comprendemos? funcionamientos de?
Avery Payne

Respuestas:

21

Aparentemente hay algunos casos extremos sin una mejor solución (por ahora):

  • enrutamiento localhost <-> localhost
  • instancia de Docker invocando a sí misma a través de su puerto publicado
  • y posiblemente más

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

ACTUALIZACIÓN: Desde 1.7.0 (2015-06-16), el proxy de userland puede deshabilitarse a favor de la horquilla NAT usando el indicador --userland-proxy = false del daemon.

Tarnay Kálmán
fuente