You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2实例中PostgreSQL角色不存在问题求助

解决Docker-Compose部署PostgreSQL时"Role 'user' does not exist"问题

核心原因

Docker容器内的PostgreSQL是独立运行的实例,你在EC2宿主机上创建的PostgreSQL角色不会同步到容器内部。此外,若容器复用了已存在的数据卷,PostgreSQL会跳过初始化步骤,导致指定角色未创建。

分步解决方案

1. 清理PostgreSQL数据卷(关键步骤)

PostgreSQL仅在第一次启动时,根据POSTGRES_USER等环境变量创建角色和数据库。若db-data卷已存在,后续启动会跳过初始化:

# 停止并移除容器
docker-compose down
# 删除PostgreSQL数据卷(若不确定卷名,可先执行docker volume ls查看)
docker volume rm $(docker volume ls | grep db-data | awk '{print $2}')
# 重新启动容器
docker-compose up -d

2. 修正环境变量配置

确保EC2实例上的.env文件与docker-compose配置完全匹配:

  • DATABASE_NAME必须和docker-compose.yml中POSTGRES_DB的值(type-prod)一致,而非.env.example中的db
  • DATABASE_URL需指向容器内的PostgreSQL服务(主机名是database,端口5432)

正确.env示例:

DATABASE_USERNAME="user"
DATABASE_PASSWORD="pass"
DATABASE_URL="postgresql://user:pass@database:5432/type-prod"
DATABASE_NAME="type-prod"
PORT=4000

3. 确保后端等待PostgreSQL就绪

depends_on仅保证容器启动顺序,不等待数据库服务就绪。给PostgreSQL添加健康检查,让后端仅在数据库就绪后启动:

修改docker-compose.yml中的database服务:

database:
  image: postgres:latest
  container_name: type-database
  restart: on-failure
  ports:
    - "35432:5432"
  environment:
    POSTGRES_USER: ${DATABASE_USERNAME}
    POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
    POSTGRES_DB: type-prod
  volumes:
    - db-data:/var/lib/postgresql/data
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U ${DATABASE_USERNAME} -d type-prod"]
    interval: 5s
    timeout: 5s
    retries: 5

修改type服务的依赖条件:

type:
  container_name: type-backend
  image: type:latest
  restart: on-failure
  build: .
  depends_on:
    database:
      condition: service_healthy
  environment:
    DATABASE_URL: ${DATABASE_URL}
    NODE_ENV: production
    PORT: 4000
  ports:
    - "4000:4000"
  command: npm run dev
  volumes:
    - app-data:/type

4. 验证容器内角色存在

若问题仍存在,进入容器手动检查角色:

# 进入PostgreSQL容器
docker exec -it type-database psql -U ${DATABASE_USERNAME} -d type-prod
# 查看所有角色
\du

如果未找到user角色,重复步骤1清理数据卷后重新启动。


内容的提问来源于stack exchange,提问作者Rohith Nambiar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:15:09