泊坞窗容器如何连接到主机上的端口?

时间:2019-01-01 10:20:00

标签: docker

我的问题与此(From inside of a Docker container, how do I connect to the localhost of the machine?)非常相似。

我试图使用--network="host"连接到主机的8118代理,但这不是我想要的。我仍然想使用桥接模式。实际上,我觉得docker的桥接与传统意义上的NAT类似:在主机上安装了虚拟交换机docker0,不同的容器依靠此交换机彼此通信,并且容器在理论上也可以ping通主机可以与主机通信并访问其开放端口,但实际上,我不知道为什么,谁可以帮助我? (ping协议基于tcp,这也意味着20/21端口可以访问。为什么8118无法访问?)

好吧,我可能已经找到原因,要监视的端口,我将尝试更改对主机代理软件的监视。

以下是我的尝试,容器无法成功连接到主机上的8118代理端口:

The terminal on the left is my host, and on the right is my docker container

主机:

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

docker:

设置为http_proxy = 192.168.125.95:8118 ...的容器,并且wget出现错误:主机没有路由,然后我关闭防火墙,然后再次尝试得到另一个错误:连接被拒绝。

docker容器:

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# 

host :(这应该没用,我的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        

2 个答案:

答案 0 :(得分:1)

解决方案:

getTabsCount()

ps: 我犯了一个非常低级的错误,我需要学习系统的原理,我有很多误会,据说一个服务不是可以ping ip可以使用的,该端口的作用是用来监视并接受数据包,pingPassing仅代表监视tcp端口没有问题(可能是0.0.0.0),但第三方服务必须注意。

答案 1 :(得分:0)

如果可以,请安装strace。然后再次在前面运行strace来运行wget。

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

查找系统级故障消息。不要忘记wget --debug。

要考虑的另一件事是,这些示例中的每一个以什么用户身份运行。当您直接运行wget等时,他们是不同的用户吗?