1

Создал мой сервис с помощью следующей команды с 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

Чтобы явно настроить прослушивание на имени хоста оверлея, сначала определите 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 можно найти на этой вики.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .