簡體   English   中英

Docker-Compose Django 無法連接到 DB 或 Celery

[英]Docker-Compose Django can't connect to DB or 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 設置中的另一個應用程序上有另一個 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將在您的localhost端口 5000 上公開 postgres 服務器,而不是向內部服務公開。

這是您可能會發現有用的相關答案。 在 Docker Compose 中更改 postgres 容器服務器端口

您的容器名稱實際上是app_postgres ,而不是 docker 撰寫中指定的db

container_name: app_postgres

您可以做的另一件事是將容器的名稱從app_postgres更改為與其他應用程序的 docker 撰寫文件中的 postgres 不同的名稱。 兩個 postgres 實例都可以公開端口 5432 供您的應用程序使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM