не получается подключить docker контейнер к сушествующей базе

Рейтинг: 0Ответов: 1Опубликовано: 09.03.2023

всем привет ! нужна помощь в понимании докера

version: '3.8'

services:
  db:
    image: postgres
    container_name: p4
    ports:
      - "5436:5432"
    restart: always
    environment:
      POSTGRES_USER: dmitry
      POSTGRES_PASSWORD: 123
      POSTGRES_DB: testbase1
#      PGDATA:
    volumes:
      - postgres-data:/var/lib/postgresql/data

  web:
    image: dmitry123123/web4
    container_name: web4
    restart: always
    ports:
      - "5006:5000"
    environment:
        POSTGRES_HOST: db
    links:
      - db

volumes:
  postgres-data:

если я запускаю его с помощью docker compose up то все в порядке и запускается два контейнера postgres и web4 но что если я хочу запустить еще один web4 разумеется на другом порту и подключить к существующему контейнеру на порту 5436 , как мне это сделать я получаю ошибку

could not connect to server: Cannot assign requested address Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5436?

или к еще одному запущенному экземпляру postgres на порту 5435

а еще как мне подключить web4 к существующей локальной базе postgres на порту 5432 если это возможно то хотелось бы увидеть строчку запуска, а то у меня какое-то недопонимание

Ответы

▲ 0

Для осуществления ваших мечт надо чтобы ваши приложения работали в одной подсети и видели друг друга по alias. Есть сложный путь - после запуска использовать docker network ls, пытаться найти созданную подсеть по имени, ну и новому контейнеру указать ее при запуске.

Либо, решаем это на уровне docker-compose.

  1. Добавляем в ваш файл секцию network
networks:
    app_network:
        # Общая сеть для приложений
        name: 'app_network'
  1. Прописываем ее в сервис db
     db:
        ...
        networks:
            app_network:
                aliases:
                    - db.local

Теперь, если для запуска второго контейнера создать свой compose и прописать ему аналогично сеть app_network, то база будет доступна по алиасу db.local