无法使用单独的 docker-compose 文件中的 django 应用程序连接到位于一个 docker-compose 文件中的 Postgres DB

发布于 2025-01-11 09:19:27 字数 1960 浏览 0 评论 0原文

我有一个大型 monorepo Django 应用程序,我想将其分成两个单独的存储库(一个用于处理外部 api 请求,另一个用于处理我计划向用户展示的前端)。我仍然希望两个 Django 应用程序在本地运行时能够访问同一个数据库。我有办法做到这一点吗?我正在为两者运行 docker,并且我的前端面向 django 应用程序无法连接到我在单独的 docker-compose 文件中设置的 Postgres 数据库,而不是我为前端应用程序制作的文件。

外部 API docker-compose 文件(运行 docker-compose up --build 时在此处创建 Postgres DB docker 映像)

---
version: "3.9"
services:
  db:
    image: postgres:13.4
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  api:
    restart: always
    build: .
    image: &img img-one
    command: bash start.sh
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    env_file:
      - variables.env

面向前端 docker-compose > 文件(这是我希望能够连接到上面的数据库的文件):

---
version: "3.9"
services:
  dashboard:
    restart: always
    build: .
    image: &img img-two
    volumes:
      - .:/code
    ports:
      - "8010:8010"
    depends_on:
      - react-app
    env_file:
      - variables.env

  react-app:
    restart: always
    build: .
    image: *img
    command: yarn start
    env_file:
      - variables.env
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "3050:3050"

下面是我在前端 django 应用程序中设置的数据库配置,我想连接到数据库,但我不断收到 当我尝试运行时连接被拒绝错误 ?

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ.get("DB_NAME", "postgres"),
        "USER": os.environ.get("DB_USERNAME", "postgres"),
        "PASSWORD": os.environ.get("DB_PASSWORD", "postgres"),
        "HOST": os.environ.get("DB_HOSTNAME", "db"),
        "PORT": os.environ.get("DB_PORT", 5432),
    }
}

关于如何解决此问题有什么想法吗 (作为参考,我还尝试将 HOST 更改为 localhost 而不是 db,但仍然得到相同的 connection returned > 错误)

I have a large monorepo Django app that I want to break into two separate repositories (1 to handle external api requests and the other to handle my front end that I plan on showing to users). I would still like to have both django apps have access to the same db when running things locally. Is there a way for me to do this? I'm running docker for both and am having issues with my front end facing django app being able to connect to the Postgres DB i have set up in a separate docker-compose file than the one I made for my front end app.

External API docker-compose file (Postgres DB docker image gets created here when running docker-compose up --build)

---
version: "3.9"
services:
  db:
    image: postgres:13.4
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  api:
    restart: always
    build: .
    image: &img img-one
    command: bash start.sh
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    env_file:
      - variables.env

Front end facing docker-compose file (This is the one I want to be able to connect to the DB above):

---
version: "3.9"
services:
  dashboard:
    restart: always
    build: .
    image: &img img-two
    volumes:
      - .:/code
    ports:
      - "8010:8010"
    depends_on:
      - react-app
    env_file:
      - variables.env

  react-app:
    restart: always
    build: .
    image: *img
    command: yarn start
    env_file:
      - variables.env
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "3050:3050"

Below is the database configuration I have set up in the front end django app that I want to connect to the DB but I keep getting connection refused errors when I try to run python manage.py runserver

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ.get("DB_NAME", "postgres"),
        "USER": os.environ.get("DB_USERNAME", "postgres"),
        "PASSWORD": os.environ.get("DB_PASSWORD", "postgres"),
        "HOST": os.environ.get("DB_HOSTNAME", "db"),
        "PORT": os.environ.get("DB_PORT", 5432),
    }
}

Any ideas on how to fix this issue? (For reference, I've also tried changing HOST to localhost instead of db but still get the same connection refused errors)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文