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, открытый для использования вашими приложениями.

Вернуться на верх