Контейнеры 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 ожидает запуска другого контейнера, но все еще существует задержка, прежде чем он станет доступен. Есть несколько возможных решений:
Настройте приложение на повторное подключение к базе данных.
Настройте приложение на ожидание базы данных с помощью команды типа wait-for-it.
Настройте условие 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"