簡體   English   中英

泊塢窗容器如何連接到主機上的端口?

[英]How does the docker container connect to a port on the host?

我的問題與此非常相似( 從Docker容器內部,如何連接到計算機的本地主機? )。

我嘗試使用--network="host"連接到主機的8118代理,但這不是我想要的。 我仍然想使用橋接模式。 實際上,我覺得docker的橋接與傳統意義上的NAT類似:在主機上安裝了虛擬交換機docker0,不同的容器依靠此交換機彼此通信,並且容器在理論上也可以ping通主機可以與主機通信並訪問其開放端口,但實際上,我不知道為什么,誰可以幫助我? (ping協議基於tcp,這也意味着20/21端口是可訪問的。為什么8118無法訪問?)

好的,我可能已經找到原因,要監視該端口,我將嘗試更改對主機代理軟件的監視。

以下是我的嘗試,容器無法成功連接到主機上的8118代理端口:

左邊的終端是我的主機,右邊的是我的docker容器

主辦:

VirtualBox-centos7(ip:192.168.125.95,shadowsocks [127.0.0.1:1080],privoxy [127.0.0.1:8118]):wget正常。

泊塢窗:

設置為http_proxy = 192.168.125.95:8118的容器,並且wget出現錯誤:沒有通往主機的路由,然后我關閉了防火牆,然后再次嘗試得到另一個錯誤:連接被拒絕。

碼頭集裝箱:

root@bee1d2892df4:/go# ip route show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2 
root@bee1d2892df4:/go# ip add                 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
23: eth0@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
root@bee1d2892df4:/go# telnet 172.17.0.1 8118 
Trying 172.17.0.1...
telnet: Unable to connect to remote host: Connection refused
root@bee1d2892df4:/go# telnet 192.168.125.95 8118
Trying 192.168.125.95...
telnet: Unable to connect to remote host: Connection refused
root@bee1d2892df4:/go# 

主持人:(這應該沒用,我的iptables不應該啟動。)

[root@localhost shadowsocks]# iptables -A INPUT -i docker0 -j ACCEPT
[root@localhost shadowsocks]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
2    DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
4    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
6    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
7    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
8    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
9    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
10   ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain DOCKER (2 references)
num  target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
num  target     prot opt source               destination         
1    DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
2    DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
3    RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-ISOLATION-STAGE-2 (2 references)
num  target     prot opt source               destination         
1    DROP       all  --  0.0.0.0/0            0.0.0.0/0           
2    DROP       all  --  0.0.0.0/0            0.0.0.0/0           
3    RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-USER (1 references)
num  target     prot opt source               destination         
1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0        

解:

echo 'listen-address  172.17.0.1:8118' > /usr/local/etc/privoxy/config 
service privoxy restart
netstat -nltp|grep 8118
tcp        0      0 172.17.0.1:8118         0.0.0.0:*               LISTEN      27154/privoxy       
tcp        0      0 127.0.0.1:8118          0.0.0.0:*               LISTEN      27154/privoxy

ps:我犯了一個非常低級的錯誤,我需要學習系統的原理,我有很多誤會,據說沒有服務可以ping ip就可以使用,端口的作用是可以使用的要監視和接受數據包,pingPassing僅代表監視tcp端口沒有問題(可能是0.0.0.0),但是第三方服務必須注意。

如果可以,請安裝strace。 然后再次在前面運行strace來運行wget。 所以,

strace -f wget .........

查找系統級別的失敗消息。 不要忘記wget --debug。

要考慮的另一件事是,這些示例中的每一個以什么用戶身份運行。 當您直接運行wget等時,他們是不同的用戶嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM