Docker部署PostgreSQL+Express,未配置SSL却报服务器不支持SSL连接
问题原因及解决方法
核心问题
你遇到的错误是因为Sequelize底层的pg驱动默认尝试以SSL方式连接PostgreSQL服务器,但你的PostgreSQL容器并未开启SSL支持。另外,你在Docker Compose的database服务中设置的PGSSLMODE=disable和PGREQUIRESSL=0是客户端环境变量,只对容器内部的PostgreSQL客户端(如psql)生效,无法控制PostgreSQL服务器是否启用SSL。
解决步骤
1. 修改Sequelize配置,明确禁用SSL
在你的Sequelize初始化代码中添加dialectOptions.ssl: false,强制客户端不使用SSL连接:
const sequelize = new Sequelize({ username: process.env.DB_OWNER, password: process.env.DB_PASSWORD, host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT!), database: process.env.DB_NAME, dialect: "postgres", dialectOptions: { ssl: false } });
2. 检查环境变量配置
确认你的.env.development文件中没有设置DB_SSL=true或其他强制启用SSL的变量,如果有,将其改为DB_SSL=false或直接删除。
可选:开启PostgreSQL服务器SSL(非必要)
如果出于某些原因需要在Docker内部连接中使用SSL,可以修改Docker Compose的database服务,添加SSL相关配置(但本地容器间连接通常不需要):
services: database: image: postgres:latest environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=admin123 - POSTGRES_DB=ticketsellermadrid_dev # 添加服务器端SSL启用参数 - POSTGRES_SSL_CERT=/var/lib/postgresql/server.crt - POSTGRES_SSL_KEY=/var/lib/postgresql/server.key volumes: # 挂载自定义SSL证书文件到容器内 - ./ssl/server.crt:/var/lib/postgresql/server.crt - ./ssl/server.key:/var/lib/postgresql/server.key
内容的提问来源于stack exchange,提问作者user22236177
相关产品推荐
相关产品推荐

