繁体   English   中英

Docker - psql:django.db.utils.OperationalError:致命:角色“admin”不存在

[英]Docker - psql: django.db.utils.OperationalError: FATAL: role “admin” does not exist

我已经为我的 Django 项目配置了 docker 和 postgres。

当我执行python manage.py runserver 0:8000 ,它给了我这个错误: django.db.utils.OperationalError: FATAL: role "admin" does not exist

但是,我在以前的项目中使用了相同的配置,并且一切似乎都很好。

这是我的 docker-compose.yml 文件

version: '3'

services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=myproject
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=admin_pass
    container_name: myproject_postgress
    volumes:
      - ./data/db:/var/lib/postgresql/data

 myproject:
    build: ./myproject
    container_name: myproject
    env_file:
      - .env
    command: "tail -f /dev/null"
    volumes:
      - ./myproject:/web
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db:postgres
    environment:
      - DJANGO_SETTINGS_MODULE=myproject.settings.local

这是我的设置文件中的数据库部分:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'admin',
        'PASSWORD': 'admin_pass',
        'HOST': 'postgres',
        'PORT': '',
    }
}

这些与 docker-compose.yml 中的相同

当我从命令行连接我的数据库时,我可以看到有用户“admin”。 (当然是本地的)没有 docker,它不会给出任何错误。 那么我对码头工人做错了什么?

PS:在我之前的项目中,我使用 env_file 而不是使用 docker-compose.yml 中的 environment 部分将 env 文件传递​​给 docker 我也尝试过,但它不起作用。

我找了很久。 谢谢!

django 配置中的主机名应该是 docker-compose.yml 文件中指定的服务的名称。 在您的情况下,主机应该是“db”而不是“postgres”。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'admin',
        'PASSWORD': 'admin_pass',
        'HOST': 'db',
        'PORT': '',
    }
}

好的,过了一会儿,在帮助下,我想通了。 我的系统上有一个本地postgres 正在运行。 我猜用户“admin”一直用于本地 postgres。 我删除了我的 data/db 文件夹并重命名用户然后它工作了! 然后,我再次删除了 db 文件夹,再次将用户重命名为“admin”,但停止了本地 postgres,它也有效!

谢谢

还花了几个小时来解决这个错误。 对于 Windows 10,它是文件\\postgres\\docker-entrypoint-initdb.d中的错误路径(此文件夹在您的 Docker 项目中)

原来是

#!/bin/env bash

我做了

#!/bin/bash

在此容器正常工作后,本地本地 PostgreSQL 没有问题。

我有同样的问题。

我是这样修复的:

如果您使用的是 Docker,并且它是侦听 5432 端口,那么您也可以终止正在侦听的其他进程。

为此,请键入以下命令以查看哪些进程正在使用端口 5432:

$ lsof -i:5432

这将如下所示:

COMMAND     PID           USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.docke 15178 andre.carvalho   86u  IPv6 0xb128ac87cd34cc69      0t0  TCP *:postgresql (LISTEN)
postgres  16620 andre.carvalho    7u  IPv6 0xb128ac87dc50c569      0t0  TCP localhost:postgresql (LISTEN)
postgres  16620 andre.carvalho    8u  IPv4 0xb128ac87d2378541      0t0  TCP localhost:postgresql (LISTEN)

在这之后,这很容易。

只需使用以下命令杀死另一个进程:

kill -9 16620

请注意,该进程由 PID 标识。

我希望它有帮助:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM