首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与psql django和docker (cookiecutter-django)的连接被拒绝

与psql django和docker (cookiecutter-django)的连接被拒绝
EN

Stack Overflow用户
提问于 2021-06-14 18:27:18
回答 1查看 106关注 0票数 0

我的django应用程序无法连接到psql容器,并出现标准连接拒绝错误。我使用了django-cookiecutter,它通过环境变量自动提供psql用户名和密码,然后通过托管DATABASE_URL字符串的.env文件将收集到的信息传递回django。

错误

代码语言:javascript
复制
django.db.utils.OperationalError: could not connect to server: Connection refused
        Is the server running on host "127.0.0.1" and accepting
        TCP/IP connections on port 5432?

当我在django设置中设置断点时,我可以看到DATABASE_URL似乎被适当地转换为标准的db dict:

代码语言:javascript
复制
{'NAME': 'hustlestat', 'USER': 'HjhPLEwuVjUIIKEHebPqNG<redacted>', 'PASSWORD': 'I43443fR42wRkUaaQ8mkd<redacted>', 'HOST': 'postgres', 'PORT': 5432, 'ENGINE': 'django.db.backends.postgresql'}

当我使用psql hustlestat -U HjhPLEwuVjUIIKEHebPqN<redcated>执行psql容器时,我可以使用该用户名连接到数据库。我没有100%使用密码,因为当我尝试连接时,它不会要求我提供密码。

下面是由cookie cutter自动生成的docker组合:

代码语言:javascript
复制
version: '3'

volumes:
  local_postgres_data: {}
  local_postgres_data_backups: {}

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: hustlestat_local_django
    container_name: django
    depends_on:
      - postgres
      - mailhog
    volumes:
      - .:/app:z
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - "8000:8000"
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: hustlestat_production_postgres
    container_name: postgres
    volumes:
      - local_postgres_data:/var/lib/postgresql/data:Z
      - local_postgres_data_backups:/backups:z
    env_file:
      - ./.envs/.local/.postgres

  docs:
    image: hustlestat_local_docs
    container_name: docs
    build:
      context: .
      dockerfile: ./compose/local/docs/Dockerfile
    env_file:
      - ./.envs/.local/.django
    volumes:
      - ./docs:/docs:z
      - ./config:/app/config:z
      - ./hustlestat:/app/hustlestat:z
    ports:
      - "7000:7000"
    command: /start-docs

  mailhog:
    image: mailhog/mailhog:v1.0.0
    container_name: mailhog
    ports:
      - "8025:8025"

  redis:
    image: redis:5.0
    container_name: redis

  celeryworker:
    <<: *django
    image: hustlestat_local_celeryworker
    container_name: celeryworker
    depends_on:
      - redis
      - postgres
      - mailhog
    ports: []
    command: /start-celeryworker

  celerybeat:
    <<: *django
    image: hustlestat_local_celerybeat
    container_name: celerybeat
    depends_on:
      - redis
      - postgres
      - mailhog
    ports: []
    command: /start-celerybeat

  flower:
    <<: *django
    image: hustlestat_local_flower
    container_name: flower
    ports:
      - "5555:5555"
    command: /start-flower

  node:
    build:
      context: .
      dockerfile: ./compose/local/node/Dockerfile
    image: hustlestat_local_node
    container_name: node
    depends_on:
      - django
    volumes:
      - .:/app:z
      # http://jdlm.info/articles/2016/03/06/lessons-building-node-app-docker.html
      - /app/node_modules
    command: npm run dev
    ports:
      - "3000:3000"
      # Expose browsersync UI: https://www.browsersync.io/docs/options/#option-ui
      - "3001:3001"

我注意到的唯一奇怪的是,尽管django在docker compose中被命名,但当我查看正在运行的容器时,它有一个随机名称,例如:

代码语言:javascript
复制
hustlestat_django_run_37888ff2c9ca

不确定这是否相关。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2021-06-14 19:32:40

好了,我已经搞清楚了。我设置了一个DATABASE_URL环境变量,因为我最初收到一个错误,说它是未设置的。在谷歌搜索后,我遇到了一份饼干切割机文档,上面说要设置它,但没有读得足够好,以至于意识到该说明是为非docker设置准备的。我的是码头。

我得到这个错误的原因是因为我在容器中执行并运行如下管理命令:docker exec -it django bash然后python manage.py migrate

这个项目的设置和环境变量的设置,你不能这样做,你必须从exec外部使用这个方法:

docker-compose -f local.yml run --rm django python manage.py migrate

我认为这两种方法是可以互换的,但事实并非如此。现在一切都正常了。

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

https://stackoverflow.com/questions/67968619

复制
相关文章

相似问题

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