Docker部署NodeJS应用无法连接PostgreSQL数据库问题求助
问题1:数据库连接地址配置错误
你在docker-compose中给web服务配置的DB环境变量里,数据库地址填的是localhost,但Docker容器内部的localhost指向的是web容器本身,不是同网络下的PostgreSQL容器。Docker Compose默认会给同个配置下的服务创建内部网络,直接用服务名db作为数据库地址即可。
修改docker-compose里web服务的环境变量:
DB: 'postgres://postgres:test123@db:5432/testing'
问题2:访问路径不匹配
你配置的接口路由是/api/status,直接访问http://ip:3000根路径会触发你代码里定义的404报错,部署后访问http://ip:3000/api/status即可拿到预期返回。
可选优化:解决PostgreSQL启动未就绪问题
depends_on只能保证容器启动顺序,不能保证PostgreSQL完成初始化、可以接受连接,如果修改后还偶尔出现连接失败的情况,可以给db服务加健康检查,保证web服务在数据库就绪后再启动:
version: "3.2" services: db: image: postgres environment: POSTGRES_PASSWORD: test123 POSTGRES_DB: testing volumes: - ./pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 3s timeout: 3s retries: 3 web: build: . command: npm start app.js depends_on: db: condition: service_healthy environment: DB: 'postgres://postgres:test123@db:5432/testing' ports: - "3000:3000"
修改完成后重新执行docker-compose up --build即可正常运行。
内容的提问来源于stack exchange,提问作者Sakar Mehra
相关产品推荐
相关产品推荐

