docker postgresql не слушает необходимый порт
Мне необходимо поднять два контейнера через docker-compose из базового образа postgresql
контейнер postgres должен слушать 5432:5432
контейнер postgres_test должен слушать 5433:5433
В docker-compose я указываю следующее...
version: "3"
services:
postgres:
restart: always
image: postgres
user: "1000"
container_name: "${DATABASE_CONTAINER_NAME}"
ports:
- "5432:5432"
environment:
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME}
volumes:
- ./data/postgres:/var/lib/postgresql/data
postgres_test:
restart: always
image: postgres
container_name: "${DATABASE_CONTAINER_NAME_TEST}"
ports:
- "5433:5433"
environment:
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME_TEST}
PGDATA: /var/lib/postgresql_test/data
volumes:
- ./data/postgres_test:/var/lib/postgresql_test/data
при этом при docker-compose up он мне отдает это. То есть container_test слушает не те порты, которые я указал в docker-compose
container_postgres_test | 2022-03-20 15:18:00.695 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
и
container_postgres | 2022-03-20 15:10:01.346 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
При этом на моей машине соответствующие порты занимаются
sudo netstat -tulpn | grep proxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 87957/docker-proxy
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 87544/docker-proxy
tcp 0 0 0.0.0.0:5433 0.0.0.0:* LISTEN 87564/docker-proxy
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 87939/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 87963/docker-proxy
tcp6 0 0 :::5432 :::* LISTEN 87550/docker-proxy
tcp6 0 0 :::5433 :::* LISTEN 87571/docker-proxy
tcp6 0 0 :::443 :::* LISTEN 87945/docker-proxy
Помогите, пожалуйста, установить соединение для контейнера container_postgres_test на 5433:5433
Ответы (1 шт):
Запись - "5432:5432" указывает с какого порта хост системы на какой порт внутри контейнера нужно "перенаправлять" трафик.
Указав ещё для первого сервиса (postgres), вы указали, что нужно "перенаправлять" с 5432 на 5432 и это работает т.к. внутри база запущена на 5432.
Но второй не работает, т.к. вы указали что нужно "перенаправлять" с 5433 на 5433, но внутри контейнера для сервиса postgres_test ничего не запущено на 5433, база всё ещё запускается на 5432 (порт по умолчанию).
В Docker разрешено публиковать одни порты внутри контейнера на совсем другие снаружи, например, в вашем случае во втором сервисе можно написать 5433:5432.
И на хосте у вас будет доступны 2 базы, первая на 5432, вторая на 5433.