使用 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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 dropzone.js 和 hapi.js 上传图片