Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker-psql:django.db.utils.OperationalError:FATAL:role";行政";不存在_Django_Postgresql_Docker_Docker Compose - Fatal编程技术网

Docker-psql:django.db.utils.OperationalError:FATAL:role";行政";不存在

Docker-psql:django.db.utils.OperationalError:FATAL:role";行政";不存在,django,postgresql,docker,docker-compose,Django,Postgresql,Docker,Docker Compose,我已经为Django项目配置了docker和postgres 当我执行python manage.py runserver 0:8000时, 它给了我以下错误:django.db.utils.OperationalError:FATAL:角色“admin”不存在 然而,我在以前的项目中使用了相同的配置,这些项目中的一切似乎都很好 这是我的docker-compose.yml文件 version: '3' services: db: image: postgres envir

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

当我执行python manage.py runserver 0:8000时, 它给了我以下错误:
django.db.utils.OperationalError:FATAL:角色“admin”不存在

然而,我在以前的项目中使用了相同的配置,这些项目中的一切似乎都很好

这是我的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,它不会给出任何错误。那么我对码头工人做了什么错事

附言: 在我以前的项目中,我使用env_文件将env文件传递给docker,而不是使用docker-compose.yml中的environment部分 我也试过了,但没用

我找了很久了。
谢谢

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

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

好吧,过了一会儿,在别人的帮助下,我明白了。有一个本地的博士后在我的系统上运行。我猜用户“admin”一直在使用本地postgres。 我删除了我的data/db文件夹并重命名了用户,然后它就工作了! 然后,我再次删除了db文件夹,再次将用户重命名为“admin”,但停止了本地postgres,它也起作用了


谢谢

我也为这个bug花了几个小时。 对于Windows 10,文件中的路径错误
\postgres\docker entrypoint initdb.d
(此文件夹位于docker项目中)

原来是

#!/bin/env bash
我做了

#!/bin/bash

之后,这个容器可以正常工作,本地PostgreSQL没有问题。

我也有同样的问题

我是这样做的:

如果您使用的是Docker,并且它是listen 5432端口,那么您也可以终止另一个listen进程

要执行此操作,请键入此命令以查看哪些进程正在使用端口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

您迁移了DB吗?当我运行命令python manage.py migrate时,它会引发相同的错误。是的,谢谢您。但问题仍然没有解决。我执行了以下步骤来删除本地postgres(在MacOS上):1)brew卸载postgresql 2)rm-rf rm-rf/usr/local/var/postgres 3)rm-rf.psql.local.psql_history.psqlrc.local l.psqlrc.pgpass