В чем смысл процесса docker-proxy? Зачем нужен tcp-прокси в пользовательском пространстве?

Я заметил, что для каждого опубликованного порта выполняется процесс docker-proxy. Какова цель этого процесса? Зачем для этого нужен tcp-прокси пользовательского пространства?

$ 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

и некоторые связанные с ними правила iptable, созданные 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

По-видимому, есть некоторые крайние случаи без лучшего обходного пути (на данный момент):

  • >localhost<-маршрутизация локального хоста
  • экземпляр docker вызывает сам себя через свой опубликованный порт
  • и, возможно, больше

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

ОБНОВЛЕНИЕ: Начиная с версии 1.7.0 (2015-06-16) пользовательский прокси-сервер может быть отключен в пользу hairpin NAT, используя флаг демона --userland-proxy=false.

Не согласен с закрытием этого вопроса. Это действительная архитектурная проблема, которая является ответвлением ssh - Restricting the network access of Docker container - Server Fault ; если мы отвергаем то, что кажется * недокументированной (по крайней мере, на веб-сайте) частью сервиса, тогда возникает вопрос: должны ли мы просто слепо устанавливать новые и блестящие сервисы, которых у нас нетне понимаете внутреннюю работу?

Также на so Why does Docker run so many processes to map ports though to my application? - Stack Overflow