【问题标题】:Django cannot connect to postgresql docker containerDjango 无法连接到 postgresql docker 容器
【发布时间】:2021-08-10 17:42:06
【问题描述】:

我有一个在 docker 容器中运行的 postgres 数据库:

我的码头工人撰写:

version: "3"
services:
  db:
    image: postgres:13.1-alpine
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=test
    ports:
      - "5432:5432"
    volumes:
      - ./postgres_data:/var/lib/postgresql/data/

在宿主机上运行的Django(ubuntu linux,不在docker容器中)无法连接到它。

django 的 settings.py:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST' : "localhost",
        'NAME' : "mydb",
        'USER' : "postgres",
        'PASSWORD' : "test",
        'PORT':5432,
    }
}

例外:

django.db.utils.OperationalError: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"

5432 端口上的数据库当然可用(我可以使用 localhost:5432 上的 dbeaver 数据库客户端连接到它)。

问题的原因可能是什么?

【问题讨论】:

    标签: python django postgresql docker


    【解决方案1】:

    HOST=db 代替localhost 访问它假设django 也包含在docker-compose.yml 中

    这是因为在您的 docker-compose 中,数据库“服务”名称是 db,因此它的“DNS”名称在 docker-compose 创建的网络中将是 db

    【讨论】:

    • 我需要从主机连接。从容器连接没问题
    • 那么问题是你是从 mac/linux 还是 windows 运行?如果您使用的是 docker-machine,则可以使用docker-machine ip default 找到 IP 地址,否则我希望 localhost 能够正常工作...
    • 在 Linux 上运行。不使用码头机器。由于其他应用程序可以连接,这非常令人困惑
    • 不,没有帮助。我没有受过教育的猜测是 psycopg2 以某种方式硬编码以查找直接在主机上运行的 postgres 服务器,而不是在连接到端口的容器中..
    【解决方案2】:

    想通了,只是 settings.py 连接值有错误

    【讨论】:

      猜你喜欢
      • 2017-05-04
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2020-03-24
      • 2019-12-19
      • 2021-04-05
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多