如何连接Docker容器中的PostgreSQL数据库?本地部署连接失败求助
问题描述
本地搭建了Django和PostgreSQL容器,服务器与数据库容器均正常运行,但无法连接PostgreSQL数据库。
docker-compose.yml 配置
version: '3' services: web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/app ports: - "8000:8000" depends_on: - db db: image: postgres:13.0-alpine volumes: - postgres_data:/var/lib/postgresql/data/ environment: - POSTGRES_USER=my_user - POSTGRES_PASSWORD=my_password - POSTGRES_DB=my_db volumes: postgres_data:
执行命令 docker exec -it container_id psql -U postgres 时出现错误:
psql: error: could not connect to server: FATAL: role "postgres" does not exist
解决方法
使用配置的用户登录数据库
你在docker-compose.yml中指定的PostgreSQL用户是my_user,而非默认的postgres,正确的登录命令应为:docker exec -it container_id psql -U my_user -d my_db也可以先进入容器终端再连接:
docker exec -it container_id sh psql -U my_user -d my_db同步Django数据库配置
确保Django项目settings.py中的数据库配置与docker-compose.yml参数完全匹配:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'my_db', 'USER': 'my_user', 'PASSWORD': 'my_password', 'HOST': 'db', # 对应docker-compose中db服务的名称 'PORT': 5432, } }清理残留数据卷(若存在旧配置)
如果之前启动过使用默认用户的PostgreSQL容器,数据卷可能残留旧配置,需清理后重新启动服务:docker-compose down -v docker-compose up --build
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

