繁体   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