【发布时间】:2022-01-08 02:56:27
【问题描述】:
我有NodeJS/TypeScript 应用程序(github repo),当我运行package.json 中定义的script 时它工作正常。即,npm run start 将启动我的本地主机,我可以通过 POSTMAN 访问端点。
我已经创建了 docker 镜像(我是 Docker 的新手,这是我的第一个镜像)。在这里,我在 POSTMAN 中收到 Error: connect ECONNREFUSED 127.0.0.1:7001 错误。
我注意到,当我运行 docker 文件时,我在终端中没有看到 Listening on port 7001 消息。这告诉我我在.Dockerfile 中犯了一些错误。
步骤:
- 我使用
docker build -t <IMAGE-NAME> .创建了docker镜像我可以看到成功创建的镜像。 - 我使用
docker run --name <CONTAINER-NAME> <IMAGE-NAME>启动了容器 - 我还在 POSTMAN 中禁用了
Use the system proxy设置,但没有运气。
详情:
- Package.json 文件
"scripts": {
"dev": "ts-node-dev --respawn --pretty --transpile-only src/server.ts",
"compile": "tsc -p .",
"start": "npm run compile && npm run dev"
}
-
当我运行
npm run start时来自terminal的响应(这是成功的)
Dockerfile
#FROM is the base image for which we will run our application
FROM node:12.0.0
# Copy source code
COPY . /app
# Change working directory
WORKDIR /app
# Install dependencies
RUN npm install
RUN npm install -g typescript
# Expose API port to the outside
EXPOSE 7001
# Launch application
CMD ["npm", "start"]
- 运行 docker 命令后的响应
- GitHub 存储库结构
【问题讨论】:
-
“EXPOSE”命令只是让 docker 知道容器中的端口应该可以在容器外部访问。要从外部 docker 实际使用它,您需要使用 Dante 在他的回答中解释的“-p”。您可能有十几个 Web 服务器容器都暴露相同的端口,但它们可以映射到主机上的不同端口。我认为This post 很好地解释了它。
标签: node.js typescript docker