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