Điểm của quá trình docker-proxy là gì? Tại sao cần có proxy tcp không gian người dùng?


34

Tôi đã nhận thấy rằng có quá trình proxy docker chạy cho mỗi cổng được xuất bản. Mục đích của quá trình này là gì? Tại sao một proxy tcp không gian người dùng cần thiết cho việc này?

$ 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

và một số quy tắc iptable liên quan được tạo bởi 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

13
Không đồng ý về việc đóng câu hỏi này. Đây là một vấn đề kiến ​​trúc hợp lệ là một nhánh của serverfault.com/questions/615372 ; nếu chúng ta bỏ phiếu xuống, những gì dường như là một phần chưa được ghi lại (ít nhất là trên trang web) của dịch vụ, thì điều đó đặt ra câu hỏi, chúng ta có nên đi xung quanh cài đặt một cách mù quáng các dịch vụ mới và sáng bóng mà chúng ta không hiểu nội bộ hoạt động của?
Avery Payne

Câu trả lời:


21

Rõ ràng có một số trường hợp cạnh mà không có cách giải quyết tốt hơn (bây giờ):

  • định tuyến localhost <-> localhost
  • ví dụ docker gọi vào chính nó thông qua cổng được xuất bản của nó
  • và có thể hơn thế nữa

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

CẬP NHẬT: Kể từ 1.7.0 (2015-06-16), proxy người dùng có thể bị vô hiệu hóa có lợi cho kẹp tóc NAT bằng cách sử dụng --userland-proxy = cờ giả của daemon.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.