Apa gunanya proses docker-proxy? Mengapa proxy tcp userspace diperlukan?

Saya telah memperhatikan bahwa ada proses docker-proxy yang berjalan untuk setiap port yang diterbitkan. Apa Tujuan dari proses ini? Mengapa proxy tcp ruang pengguna diperlukan untuk ini?

$ 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

dan beberapa aturan iptable terkait yang dibuat oleh 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

Rupanya ada beberapa kasus tepi tanpa solusi yang lebih baik (untuk saat ini):

  • >localhost & lt;-localhost routing
  • instance docker memanggil dirinya sendiri melalui port yang dipublikasikan
  • dan mungkin lebih

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

Pembaruan: sejak 1.7.0 (2015/06/16) proxy userland dapat dinonaktifkan untuk mendukung hairpin NAT menggunakan flag --userland-proxy=false daemon.

Tidak setuju tentang menutup pertanyaan ini. Ini adalah masalah arsitektur yang valid yang merupakan cabang dari ssh - Restricting the network access of Docker container - Server Fault ; jika kita down-voting apa yang tampaknya menjadi * un * didokumentasikan (setidaknya di situs web) bagian dari layanan, maka itu menimbulkan pertanyaan, Haruskah kita berkeliling secara membabi buta menginstal layanan baru dan mengkilap yang kita tidak mengerti cara kerja internal?

Juga pada so Why does Docker run so many processes to map ports though to my application? - Stack Overflow