При использовании узла Docker Swarm в оверлейной сети я терял связь при подключении с другого хоста
Создал мой сервис с помощью следующей команды с 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 ответ
Чтобы явно настроить прослушивание на имени хоста оверлея, сначала определите 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-адрес наложения.
Более подробную информацию о CLI Docker можно найти на этой вики.