Контейнеры docker не могут соединиться друг с другом

У меня есть приложение django-rest-framwork, которое использует PosgreSql в качестве базы данных. Поэтому я использую контейнеры docker для них, один образ для django-rest-framwork и один для PosgreSql, а затем файл docker compose для их обработки.

  • db service refrese to PostgreSQL
  • backend относится к приложению Django Rest

У меня есть файл docker-compose

version: '3.9'
services:
  
  db:
    image: postgres:latest
    restart: always
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=85842475DB
      - POSTGRES_DB=sports_center_db
      - POSTGRES_PORT=5432
  
  backend:
    build: ./api
    depends_on:
      - db
    ports:
      - "8000:8000"
    environment:
      - DB_NAME=sports_center_db
      - DB_USER_NAME=postgres
      - DB_PASSWORD=85842475DB
      - DB_HOST=db
      - DB_PORT=5432

Создается правильно, но когда я запустил docker compose up я получил следующие логи

Как я понимаю, контейнеры не могут соединяться друг с другом. Любая ошибка или если я что-то упустил в файле compose, пожалуйста, скажите мне, почему это происходит и как это решить.

EDIT: как предложил BMitch, возможно, вам нужно создать сеть.

Первоначальный ответ:

Может быть, вам нужно связать их

?

Попробуйте добавить следующее к backend:

    links:
      - db

Ваше приложение запустилось до того, как база данных завершила инициализацию. Depends_on ожидает запуска другого контейнера, но все еще существует задержка, прежде чем он станет доступен. Есть несколько возможных решений:

  1. Настройте приложение на повторное подключение к базе данных.

  2. Настройте приложение на ожидание базы данных с помощью команды типа wait-for-it.

  3. Настройте условие depends_on, чтобы оно также ожидало проверки здоровья:

version: "2.4"
services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
  redis:
    image: redis
  db:
    image: postgres
    healthcheck:
      test: "exit 0"
Вернуться на верх