港口甚至曝光后无法访问。 拒绝连接(Port not accessible even after

2019-10-28 10:52发布

我们创建了一个码头工人的容器是这样的:

docker container create \
    --name orderer \
    --network dscsa_net \
    --workdir $WORK_DIR \
    --expose=7050 \
    hyperledger/fabric-orderer:1.3.0 ./start-orderer.sh

但无法连接到端口7050的容器上。

root@dcee7e74266f:/home# nc -vz 10.0.0.194 7050
nc: connect to 10.0.0.194 port 7050 (tcp) failed: Connection refused

我们能够ping通容器:

root@dcee7e74266f:/home# ping 10.0.0.194
PING 10.0.0.194 (10.0.0.194) 56(84) bytes of data.
64 bytes from 10.0.0.194: icmp_seq=1 ttl=64 time=0.810 ms
64 bytes from 10.0.0.194: icmp_seq=2 ttl=64 time=1.30 ms
64 bytes from 10.0.0.194: icmp_seq=3 ttl=64 time=0.668 ms
64 bytes from 10.0.0.194: icmp_seq=4 ttl=64 time=1.10 ms
64 bytes from 10.0.0.194: icmp_seq=5 ttl=64 time=0.631 ms
^C
--- 10.0.0.194 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 0.631/0.902/1.301/0.261 ms

也看到进程侦听的容器上的端口7050:

root@9756199efefa:/home# netstat -tuplen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 127.0.0.1:7050          0.0.0.0:*               LISTEN      0          10097930    7/orderer       
tcp        0      0 127.0.0.11:34865        0.0.0.0:*               LISTEN      0          10097705    -               
udp        0      0 127.0.0.11:51385        0.0.0.0:*                           0          10097704    -  

这里发生了什么? 我们如何解决这个问题?

编辑:我们是一个覆盖网络上。 在回答提出的发布标志是N / A,因为我们正在做的容器容器通信。 总之,我们尝试过了,这是行不通的。

有一件事我们已经注意到这是如果我们运行:

docker network inspect <our-network-name> 

除其他事项外,它打印出一个containers部分,但在这一节只在主机上从容器docker network inspect执行中列出。 托管在其他节点容器未上市(也提到在这里 )。

我们证实,如果我们运行:

docker node ls

所有的节点是群的一部分。

好像其他人也遇到了这个问题,例如, 在这里 ,但如何解决?

注:我们能够连接到运行暴露在端口7054不同的服务这个容器创建另一个容器,甚至没有使用expose标志。

root@dcee7e74266f:/home# nc -zv 10.0.0.164 7054
Connection to 10.0.0.164 7054 port [tcp/*] succeeded!

并进一步与tcpdump和tcpdump的输出调试是相同的输出,当有人试图连接到其上没有进程监听的端口。 但正如前面所示netstat显示的是在听的过程,我们可以从本地主机连接的过程。

tcpdump的输出:

root@dcee7e74266f:/test# tcpdump -s0 host 10.0.0.195 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
23:44:45.978583 IP dcee7e74266f.52148 > orderer.dscsa_net.7050: Flags [S], seq 3845506108, win 28200, options [mss 1410,sackOK,TS val 4203049443 ecr 0,nop,wscale 7], length 0
23:44:45.979324 IP orderer.dscsa_net.7050 > dcee7e74266f.52148: Flags [R.], seq 0, ack 3845506109, win 0, length 0

在R标志告诉客户重置连接。

traceroute的输出:

root@dcee7e74266f:/test# traceroute 10.0.0.195     
traceroute to 10.0.0.195 (10.0.0.195), 30 hops max, 60 byte packets
 1  orderer.dscsa_net (10.0.0.195)  1.008 ms  0.900 ms  0.872 ms

Answer 1:

揭露图片或容器上唯一集元数据,它不会使港口外部访问。 你正在寻找的选项发布:

docker container create \
    --name orderer \
    --network dscsa_net \
    --workdir $WORK_DIR \
    --publish=7050:7050 \
    hyperledger/fabric-orderer:1.3.0 ./start-orderer.sh


Answer 2:

这个问题解决了感谢到1 。 听了服务器127.0.0.1是问题。 一旦我们改变了收听地址0.0.0.0 (显示为:::netstat下方输出),我们都能够连接到服务器:

root@e9766a94d102:/home# netstat -tuplen          
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 127.0.0.11:37641        0.0.0.0:*               LISTEN      0          12821468    -               
tcp6       0      0 :::7050                 :::*                    LISTEN      0          12821696    7/orderer       
udp        0      0 127.0.0.11:51855        0.0.0.0:*                           0          12821467    -       

没有必要对任何exposepublish标志。 注意自我:在这浪费1.5天。



文章来源: Port not accessible even after being exposed. Connection refused
标签: docker