мы создали 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
мы можем пропинговать контейнер:
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 -
что такоездесь происходит?Как мы можем это исправить?
РЕДАКТИРОВАТЬ: мы находимся в оверлейной сети.Флаг публикации, предложенный в ответе, не указан, так как мы выполняем связь между контейнерами.В любом случае, мы попробовали это, и это не сработало.
Есть одна вещь, которую мы заметили: если мы запустим:
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