gpt4 book ai didi

node.js - Docker 容器中的 NodeJS 14 无法连接到 Postgres DB(进/出 docker)

转载 作者:行者123 更新时间:2023-12-02 18:59:57 27 4
gpt4 key购买 nike

我正在使用 Rest API(NodeJS、Express)和 PostgreSQL 制作 React-Native 应用。

在我的本地机器上托管时一切正常。当 API 托管在我的机器上并且 PostgreSQL 托管在 docker 容器中时,一切正常。

但是当后端和前端都在 docker 中时,可以从本地的所有计算机访问数据库,但不能通过后端访问数据库。

我正在使用 docker-compose。

version: '3'
services:
wallnerbackend:
build:
context: ./backend/
dockerfile: ../Dockerfiles/server.dockerfile
ports:
- "8080:8080"
wallnerdatabase:
build:
context: .
dockerfile: ./Dockerfiles/postgresql.dockerfile
ports:
- "5432:5432"
volumes:
- db-data:/var/lib/postgresql/data
env_file: .env_docker
volumes:
db-data:

.env_docker 和 .env 具有相同的参数(只是名称不同)。

这是我的 dockerfiles:

后端

FROM node:14.1

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "start"]

数据库

FROM postgres:alpine

COPY ./wallnerdb.sql /docker-entrypoint-initdb.d/

我尝试使用 docker 的名称、我的主机 IP 地址、localhost 将连接 url 中的主机名更改为 postgres,但没有结果。

它也是相同的 .env(我的 Node 存储库中的文件与 db_name passwd 等)我在本地使用以将我的后端连接到数据库。

最佳答案

由于您在 Docker 容器中使用 NodeJS 14 - 确保您安装了最新的 pg 依赖项:

https://github.com/brianc/node-postgres/issues/2180

或者:降级到 Node 12。

还要确保数据库和“后端”都在同一个网络中。另外:后端最好“依赖”数据库。

version: '3'

services:
wallnerbackend:
build:
context: ./backend/
dockerfile: ../Dockerfiles/server.dockerfile
ports:
- '8080:8080'
networks:
- default
depends_on:
- wallnerdatabase
wallnerdatabase:
build:
context: .
dockerfile: ./Dockerfiles/postgresql.dockerfile
ports:
- '5432:5432'
volumes:
- db-data:/var/lib/postgresql/data
env_file: .env_docker
networks:
- default

volumes:
db-data:

networks:
default:

在您的情况下这不是必需的 - 正如评论中指出的那样 - 因为 Docker Compose 已经创建了一个 default network

容器名称“wallnerdatabase”是您的数据库的主机名 - 如果没有另外配置。

关于node.js - Docker 容器中的 NodeJS 14 无法连接到 Postgres DB(进/出 docker),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61578005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com