Docker-psql:django.db.utils.OperationalError:FATAL:role";行政";不存在
我已经为Django项目配置了docker和postgres 当我执行python manage.py runserver 0:8000时, 它给了我以下错误: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.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