Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 停靠的节点应用程序无法连接到停靠的Postgres数据库_Node.js_Postgresql_Docker_Npm_Docker Compose - Fatal编程技术网

Node.js 停靠的节点应用程序无法连接到停靠的Postgres数据库

Node.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\

我尝试了许多可能的解决方案,但都没有成功。 下面是:

我构建了一个nodejs容器和一个postgres docker容器。使用docker compose来配置它们,并使用Dockerfile来构建nodejs/typescript应用程序

docker-compose.yml

版本:“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不是问题所在。您必须为节点应用程序提供日志文件。