【发布时间】:2021-05-16 19:39:15
【问题描述】:
我刚刚开始使用 Docker 和面团,我成功地从它创建了一个图像和一个容器
我没有成功通过邮递员连接到容器的端口,我得到了Error: connect ECONNREFUSED 0.0.0.0:8000。
在我的 server.js 文件中,我有:
const app = require('./api/src/app');
const port = process.env.PORT || 3000; // PORT is set to 5000
app.listen(port, () => {
console.log('App executing to port ', port);
});
在我的 index.js 中有:
const express = require('express');
const router = express.Router();
router.get('/api', (req, res) => {
res.status(200).send({
success: 'true',
message: 'Welcome to fixit',
version: '1.0.0',
});
});
module.exports = router;
因此,如果我使用 npm start 或 nodemon server.js 运行我的应用程序,localhost:3000/api 端点将按预期工作。
然后我使用命令docker build . -t fixit-server 和Dockerfile 为我的应用程序构建一个docker 映像:
FROM node:15.14.0
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
COPY . .
EXPOSE 5000
# CMD ["npm", "start"]
CMD npm start
# CMD ["nodemon", "server.js"]
并使用命令docker run -d -p 8000:5000 --name fixit-container fixit-server tail -f /dev/null运行容器
并用docker ps -a 列出容器表明它正在运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da0e4ef12402 fixit-server "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 0.0.0.0:8000->5000/tcp fixit-container
但是当我到达端点0.0.0.0:8000/api时,我得到了 ECONNREFUSED 错误。
我尝试了CMD ["npm", "start"]和CMD npm start,但我都得到了错误。
你能知道我做错了什么吗?
【问题讨论】:
-
你为什么
docker run ... tail -f /dev/null?那个“什么都不做”命令运行而不是你的服务器。
标签: node.js docker npm dockerfile