Изменение порта сервера postgres контейнеров в Docker Compose

Я пытаюсь развернуть второй контейнер базы данных на удаленном сервере, используя Docker compose. Этот сервер postgresql работает на порту 5433, а не в 5432, как используется первым контейнером postgresql.

Когда я настраиваю приложение, я получаю этот вывод ошибки:

web_1  | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1  |    Is the server running on host "db" (172.17.0.2) and accepting
web_1  |    TCP/IP connections on port 5433?

и мой файл для докеры:

db:
  image: postgres:latest
  environment:
    POSTGRES_PASSWORD: route_admin
    POSTGRES_USER: route_admin
  expose:
    - "5433"
  ports:
    - "5433"
  volumes:
    - ./backups:/home/backups



web:
  build: .
  command:  bash -c "sleep 5 && python -u application/manage.py runserver 0.0.0.0:8081"
  volumes:
    - .:/code
  ports:
    - "81:8081"
  links:
    - db
  environment:
    - PYTHONUNBUFFERED=0

Я считаю, что проблема должна быть в файле postgresql.conf на экземпляре сервера, который установил порт на 5432, вызывая ошибку, когда мое приложение пытается подключиться к нему. Есть ли простой способ изменения порта с помощью команды в файле компоновки, а не для обмена файлами с томами?

Я использую официальный контейнер postgresql для этого задания.

Ответ 1

Я предполагаю, что postgres запущен на порт 5432 в контейнере, и вы хотите открыть его на хосте на 5433.

Используйте это в строфе портов:

ports:
    -"5433:5432"

Это покажет сервер на порту 5433 на хосте. В этом случае вы можете избавиться от существующей структуры раскрытия.

Если вы хотите показывать службу другим службам, объявленным в файле компоновки, просто используйте раскрывающуюся строфу и укажите ее на внутренний порт 5432.