Docker-Compose Django не может подключиться к БД или Celery
У меня все находится в одной сети (оно общается с другим приложением в другом файле docker-compose).
Но я продолжаю получать эту ошибку:
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "db" (192.168.208.3) and accepting
TCP/IP connections on port 5000?
Когда я меняю порт SQL_PORT=5432
(порт по умолчанию, который запущен в контейнере postgres), ошибка выше исчезает и мое приложение работает, но затем возникают проблемы при попытке подключения к celery или в shell он говорит, что db не подключен.
Мне нужно использовать 5000, потому что во втором docker-compose setup есть еще одна postgres db на другом приложении.
Кажется, я заблудился во внутреннем устройстве сетей. Я был почти уверен, что должен использовать открытый порт 5000 для моей базы данных.
version: "3.9"
services:
app:
build: .
command: python manage.py runserver 0.0.0.0:8000
container_name: app
environment:
- DEBUG=True
- PYTHONUNBUFFERED=1
- CELERY_BROKER=redis://broker:6379/0
- CELERY_BACKEND=redis://broker:6379/
- APP_BASIC_AUTH_PASSWORD=adPswd12*
- APP_BASIC_AUTH_USER=admin
- APP_TOKEN_AUTH=NHEC_UTILITY
- VTN_API_URL=vtn_app:8000
- VTN_API_TOKEN=NHECAPP_UTILITY
- SQL_PORT=5000
volumes:
- .:/code
ports:
- "9000:8000"
networks:
- app-web-net
depends_on:
- db
- celery-worker
- broker
app_test:
build: .
command: python manage.py test
container_name: app_test
environment:
- DEBUG=True
- PYTHONUNBUFFERED=1
volumes:
- .:/code
depends_on:
- db
db:
image: postgres:10
container_name: app_postgres
ports:
- 5000:5432
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: nhec
POSTGRES_USER: nhec
POSTGRES_PASSWORD: nhec
networks:
- app-web-net
celery-worker:
build: .
command: celery -A app worker -l DEBUG
depends_on:
- db
- broker
environment:
CELERY_BROKER_URL: redis://broker:6379/0
networks:
- app-web-net
broker:
image: redis:6-alpine
ports:
- 6379:6379
networks:
- app-web-net
volumes:
db_data: {}
networks:
app-web-net:
driver: bridge
ports
будет выставлять сервер postgres на ваш localhost
порт 5000, а не на внутренние службы.
Вот связанный ответ, который может быть вам полезен. Изменение порта сервера postgres containers в Docker Compose
Ваше имя контейнера на самом деле app_postgres
, а не db
, как указано в вашем docker compose:
container_name: app_postgres
Другая вещь, которую вы можете сделать, это изменить имя контейнера с app_postgres
на то, которое не совпадает с именем postgres в файле docker compose вашего другого приложения. Оба экземпляра postgres могут иметь порт 5432, открытый для использования вашими приложениями.