使用 Nodejs (Hapi.js) 和 Prisma 的 Docker 中的 ConnectionError

Posted

技术标签:

【中文标题】使用 Nodejs (Hapi.js) 和 Prisma 的 Docker 中的 ConnectionError【英文标题】:ConnectionError in Docker with Nodejs (Hapi.js) and Prisma 【发布时间】:2021-06-20 02:56:39 【问题描述】:

我想将我的 Nodejs 应用程序放入 docker。通过 npm run build and start 部署它时,我可以向它发送请求。 但是在创建 docker 映像时,我遇到了问题: 首先,我的 Dockerfile 中有一个 EXPOSE 8080。然后我运行docker run -p=3000:8080 --env-file .env my-docker-file。之后,我得到了服务器在 http://localhost:3000 上运行的信息。 我知道 localhost:3000 只是在 docker 文件中。但至少 docker 正在运行。

当我使用命令http localhost:3000(或浏览器)时,我得到http: error: ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) while doing a GET request to URL: http://localhost:3000/

有人知道出了什么问题吗???我不知道。

感谢所有将我引向正确方向的提示。

我的 Dockerfile:

## this is the stage one , also know as the build step

FROM node:12.17.0-alpine as builder

WORKDIR /app

COPY package*.json ./
COPY prisma ./prisma/
COPY tsconfig.json .
COPY src ./src/
COPY tests ./tests/

RUN npm install
RUN npx prisma generate

COPY . .

RUN npm run build

## this is stage two , where the app actually runs

FROM node:12.17.0-alpine

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/dist ./dist

EXPOSE 8080
CMD npm start

【问题讨论】:

你能发布你的 Dockerfile 吗? 我做到了 :) 希望你发现一个错误 After that I am getting the info that the server is running on http://localhost:3000,你从容器中获取了这个信息,但是你绑定了 3000:8000,8000 是从哪里来的? 3000 是主机端口,而 8000 应该是容器端口... 【参考方案1】:

如果你使用 Dockerfile,首先你最好构建你的镜像。

FROM node:12.17.0-alpine as builder

WORKDIR /app

COPY . .

RUN npm install
RUN npx prisma generate

RUN npm run build

## this is stage two , where the app actually runs

FROM node:12.17.0-alpine

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/dist ./dist

EXPOSE 8080
CMD ["npm","start"]

从您的Dockerfile 所在位置:

docker build -t your-image-name .

docker run -p 3000:8080 --env-file .env your-image-name

【讨论】:

是的,我就是这样做的 我刚刚复制了你的 Dockerfile,但是得到了同样的错误【参考方案2】:

你检查IP地址了吗?

当我第一次将我的 Node 项目部署到 Docker 时,我也无法访问它,因为我的 Node 项目正在监听 localhost 请求。但是如果你不将你的网络指定为主机,你的 Docker 容器将在你的子网中有一些其他的 IP 地址。

我已将 Node 项目的侦听 IP 地址更改为 0.0.0.0,之后我可以连接到在 Docker 容器中运行的 Node 项目。

【讨论】:

以上是关于使用 Nodejs (Hapi.js) 和 Prisma 的 Docker 中的 ConnectionError的主要内容,如果未能解决你的问题,请参考以下文章

Hapi js - 如何发送服务器请求进行基本身份验证?

如何使用 dropzone.js 和 hapi.js 上传图片

如何使用dropzone.js和hapi.js上传图像

如何在 hapi.js 上的路径上使用 hapi-auth-jwt2 身份验证?

如何使用hapi.js读取已在浏览器中设置的cookie

Hapi.js —— Node.js 服务器端应用开发框架