При использовании узла Docker Swarm в оверлейной сети я терял связь при подключении с другого хоста

641
VaTo

Создал мой сервис с помощью следующей команды с Docker:

docker service create --mount  type=bind,src=/tmp/postgres,dst=/var/lib/postgresql/data  --name dev_db  --network mynetwork -p 5432:5432 -d postgres 

Проблема в том, что если я не использую оверлейную сеть --network, я могу подключиться к этому экземпляру докера с другого хоста, просто используя простой клиент postgresql:

psql -h (ipofthehost) mydatabase -Umydatabase

но теперь, когда я хочу подключиться к нему с другого хоста, я получаю эту ошибку:

psql: could not connect to server: Connection refused Is the server running on host "ipofdehost" and accepting TCP/IP connections on port 5432? 

Что говорит мне, что это может быть запущено, но оно не может видеть это. Я проверил, работает ли сервис с:

docker service ls ID NAME MODE REPLICAS IMAGE PORTS 8hr0qwtca230 dev_db replicated 1/1 postgres:latest *:5432->5432/tcp 

Я проверил с помощью ss, чтобы убедиться, что служба прослушивает:

State Recv-Q Send-Q Local Address:Port Peer Address:Port  LISTEN 0 128 *:22 *:*  LISTEN 0 100 127.0.0.1:25 *:*  LISTEN 0 128 :::22 :::*  LISTEN 0 128 :::5432 :::*  LISTEN 0 128 :::12376 :::*  LISTEN 0 100 ::1:25 :::*  LISTEN 0 128 :::443 :::*  

Кажется, что он слушает из-за строки:, :::5432но для меня кажется, что это только для подключений ipv6, так как я могу заставить его слушать подключения ipv4? Все, что я изменил, было то, что я подключил этот узел к оверлейная сеть, поэтому я не понимаю, почему, если я сделал это, чтобы выставить порты, не становится доступным публично.

Спасибо!

1

1 ответ на вопрос

1
Ina Kahn

Чтобы явно настроить прослушивание на имени хоста оверлея, сначала определите IP-адрес интерфейса оверлея, а затем измените команды запуска на:

docker service create --mount  type=bind,src=/tmp/postgres,dst=/var/lib/postgresql/data --name dev_db --network mynetwork -p host-overlay-ipv4:5432:5432 -d postgres 

Замените host-overlay-ipv4 на правильный IPv4-адрес наложения.

Более подробную информацию о Docker CLI можно найти на этой вики .

Похожие вопросы