Node.js 停靠的节点应用程序无法连接到停靠的Postgres数据库
我尝试了许多可能的解决方案,但都没有成功。 下面是: 我构建了一个nodejs容器和一个postgres docker容器。使用docker compose来配置它们,并使用Dockerfile来构建nodejs/typescript应用程序 docker-compose.ymlNode.js 停靠的节点应用程序无法连接到停靠的Postgres数据库,node.js,postgresql,docker,npm,docker-compose,Node.js,Postgresql,Docker,Npm,Docker Compose,我尝试了许多可能的解决方案,但都没有成功。 下面是: 我构建了一个nodejs容器和一个postgres docker容器。使用docker compose来配置它们,并使用Dockerfile来构建nodejs/typescript应用程序 docker-compose.yml 版本:“3” 卷数: pg_卷: 网络: 应用程序网络: 司机:驾驶台 服务: db: 容器名称:db 图片:博士后 端口: - "5432:5432" 环境: -POSTGRES_DB=db22 -POSTGRES\
版本:“3”
卷数:
pg_卷:
网络:
应用程序网络:
司机:驾驶台
服务:
db:
容器名称:db
图片:博士后
端口:
- "5432:5432"
环境:
-POSTGRES_DB=db22
-POSTGRES\u USER=POSTGRES
-POSTGRES_密码=q123
卷数:
-pg_vol:/var/lib/postgresql/data
网络:
-应用程序网络
网络应用程序:
容器名称:webapp
建造:
上下文:/
dockerfile:dockerfile
环境:
-数据库地址=postgres://postgres:q123@db:5432/db22
端口:
- "5000:5000"
网络:
-应用程序网络
取决于:
-分贝
Dockerfile
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY ./dist .
CMD [ "npm", "start" ]
当我执行docker compose up--build时,它在连接到postgres db时显示一个错误。DB启动正常
错误标准输出
Starting db ... done
Starting webapp ... done
Attaching to db, webapp
db |
db | PostgreSQL Database directory appears to contain a database; Skipping initialization
db |
db | 2020-11-24 16:32:25.918 UTC [1] LOG: starting PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db | 2020-11-24 16:32:25.918 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db | 2020-11-24 16:32:25.918 UTC [1] LOG: listening on IPv6 address "::", port 5432
db | 2020-11-24 16:32:25.923 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db | 2020-11-24 16:32:25.928 UTC [25] LOG: database system was shut down at 2020-11-24 16:32:18 UTC
db | 2020-11-24 16:32:25.933 UTC [1] LOG: database system is ready to accept connections
webapp |
webapp | > backend-postgres@1.0.0 start /usr/src/app
webapp | > node app.js
webapp |
webapp | undefined
webapp | undefined
webapp | running in-code config
webapp | Error: connect EHOSTUNREACH 172.19.0.2:5432
webapp | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
webapp | errno: -113,
webapp | code: 'EHOSTUNREACH',
webapp | syscall: 'connect',
webapp | address: '172.19.0.2',
webapp | port: 5432
webapp | }
webapp | npm ERR! code ELIFECYCLE
webapp | npm ERR! errno 1
webapp | npm ERR! backend-postgres@1.0.0 start: `node app.js`
webapp | npm ERR! Exit status 1
webapp | npm ERR!
webapp | npm ERR! Failed at the backend-postgres@1.0.0 start script.
webapp | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
webapp |
webapp | npm ERR! A complete log of this run can be found in:
webapp | npm ERR! /root/.npm/_logs/2020-11-24T16_32_26_955Z-debug.log
webapp exited with code 1
请帮我纠正一下
系统:
Fedora 33(工作站版)
编辑:
我使用命令
docker start webapp
重新启动了docker容器。与上面相同的错误。根据日志判断:应用程序以1退出,因为无法访问端口5432处的主机,可能数据库尚未就绪(您可以通过检查数据库容器上是否创建了db22来验证)。您可以做的是:在webapp上添加重新启动策略,使用以下方法:
webap:代码>
重新启动\u策略:条件:故障时
然后检查问题是否依然存在我的系统是Fedora 33(工作站版)。这与Docker有一些问题
结果是:
随着Fedora 33的发布,Docker没有得到Fedora 33的正式支持。2020年10月29日
我卸载了docker。重新启动我的笔记本电脑。
然后安装Podman和Podman Compose。一切都很好
谢谢大家的帮助。试着运行docker compose up-d
在后台启动容器;webapp
容器可能会以您显示的方式失败。然后再次尝试运行相同的命令,这将针对已经运行的db
容器重新启动webapp
容器。延迟一段时间后,它是否第二次工作?我使用docker start webapp
命令在一段时间后启动webapp容器,但它抛出相同的错误。docker postgres db正在运行。好吧,那么db不是问题所在。您必须为节点应用程序提供日志文件。