gpt4 book ai didi

docker - 即使暴露了端口也无法访问。拒绝连接

转载 作者:行者123 更新时间:2023-12-02 20:33:49 26 4
gpt4 key购买 nike

我们创建了这样的docker容器:

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的主机上的容器。未列出其他节点上托管的容器(也提到了 here)。

我们验证了是否可以运行:
docker node ls

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

似乎其他人也遇到了这个问题,例如 here,但解决方案是什么?

注意:我们能够连接到另一个运行在端口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显示了一个正在侦听的进程,我们可以从localhost连接到该进程。

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

最佳答案

Expose仅在图像或容器上设置元数据,而不能从外部访问端口。您正在寻找的选项是发布:

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

关于docker - 即使暴露了端口也无法访问。拒绝连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55055383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com