首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过postgres容器的名称访问它?无法翻译主机名错误

如何通过postgres容器的名称访问它?无法翻译主机名错误
EN

Stack Overflow用户
提问于 2022-05-26 16:17:22
回答 1查看 291关注 0票数 0

我有一个django和postgres集装箱。当django应用迁移时,它不会看到我命名为pgdb的postgres容器,并得到以下错误:

django.db.utils.OperationalError:无法将主机名"pgdb“转换为地址:名称解析中的临时失败

似乎没有名为"pgdb“的坞容器。如果我运行“docker-组合运行pgdb”,它将在"app“组下创建一个名为"app_pgdb_run_23423423”的postgres容器。有趣的是,我以前使用过这个settings.py设置和"pgdb“postgres容器名称。根本的问题是什么?

可以从https://github.com/UberStreuner/mailing-service克隆完整的代码。

我的settings.py设置,环境变量肯定不是错的。

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': os.environ.get('DB_ENGINE', 'django.db.backends.postgresql_psycopg2'),
        'NAME': os.environ.get('POSTGRES_DB'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': os.environ.get('POSTGRES_HOST', 'pgdb'),
        'PORT': os.environ.get('POSTGRES_PORT', '5432')
    }
}

docker-compose.yml

代码语言:javascript
复制
version: "3.8"

services:
  django:
    build: .
    container_name: django
    command: ./docker-entrypoint.sh
    volumes:
      - .:/usr/src/app/
    ports:
      - "8000:8000"
    env_file:
      - ./.dev.env
    depends_on:
      - pgdb
      - redis

  celery:
    build: .
    command: celery -A mailing worker -l INFO
    volumes:
      - .:/usr/src/app/
    env_file:
      - ./.dev.env
    depends_on:
      - django
      - redis
      - pgdb

  celery-beat:
    build: .
    command: celery -A mailing beat -l INFO
    volumes:
      - .:/usr/src/app/
    env_file:
      - ./.dev.env
    depends_on:
      - django
      - redis
      - pgdb

  pgdb:
    image: postgres
    container_name: pgdb
    env_file:
      - ./.dev.env
    volumes:
      - pgdata:/var/lib/postgresql/data
    expose:
      - "5432"
    ports:
      - "5432:5432"

  redis:
    image: "redis:alpine"

volumes:
  pgdata:

.dev.env

代码语言:javascript
复制
SECRET_KEY=django-insecure-kh8ot+ag-^osyhg5itzj!iw_g#dklw3f75c0)^-7)*@^)#tc#x
DEBUG=1

DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1
CELERY_BROKER=redis://redis:6379/0
CELERY_BACKEND=redis://redis:6379/0

POSTGRES_DB=django_postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password

docker-entrypoint.sh

代码语言:javascript
复制
#!/bin/bash
python manage.py migrate
python manage.py runserver 0.0.0.0:8000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 15:58:04

我解决了这个问题。这可能是因为我从python通过.dev.env文件导入了Django的环境变量,从docker-复合导入了作为env_file传递的Django的环境变量。因此,我注释掉了来自settings.py的dotenv加载,它起了作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72394938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档