Порт недоступен даже после разоблачения. В соединении отказано - PullRequest
0 голосов
/ 08 марта 2019

мы создали 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

Ответы [ 2 ]

5 голосов
/ 08 марта 2019

Expose устанавливает только метаданные на образе или контейнере, он не делает порт доступным извне.Опция, которую вы ищете, это опубликовать:

docker container create \
    --name orderer \
    --network dscsa_net \
    --workdir $WORK_DIR \
    --publish=7050:7050 \
    hyperledger/fabric-orderer:1.3.0 ./start-orderer.sh
0 голосов
/ 11 марта 2019

Решил эту проблему благодаря 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    -       

, нет необходимости в expose или publish флаги.примечание к себе: на это потрачено 1,5 дня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...