Создал мой сервис с помощью следующей команды с 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? Все, что я изменил, было то, что я подключен этот узел в оверлейной сети, поэтому я не понимаю, почему, если я сделал это, чтобы выставить порты, не становится доступным публично.
Спасибо!