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 шт):

Автор решения: Exploding Kitten

Запись - "5432:5432" указывает с какого порта хост системы на какой порт внутри контейнера нужно "перенаправлять" трафик.

Указав ещё для первого сервиса (postgres), вы указали, что нужно "перенаправлять" с 5432 на 5432 и это работает т.к. внутри база запущена на 5432.

Но второй не работает, т.к. вы указали что нужно "перенаправлять" с 5433 на 5433, но внутри контейнера для сервиса postgres_test ничего не запущено на 5433, база всё ещё запускается на 5432 (порт по умолчанию).

В Docker разрешено публиковать одни порты внутри контейнера на совсем другие снаружи, например, в вашем случае во втором сервисе можно написать 5433:5432.

И на хосте у вас будет доступны 2 базы, первая на 5432, вторая на 5433.

→ Ссылка