我安装了nodejs并构建了一个简单的docker文件并构建它。当我想启动服务器时,它不会在docker ps中被监听,30秒后它会关闭。为什么?我看了一个视频,那里正在工作。
dockerfile:
FROM node:16.13.0-alpine
ADD . .
CMD ["node" "app.js"];
nodejs
'use strict';
const http = require('http');
const { processenv } = require('processenv');
const message = processenv('MESSAGE', 'Hello World');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'content-type': 'text/html'
});
res.write(message);
res.end();
});
server.listen(3000);
命令
docker run -d -p 3000:3000 -e MESSAGE='Hallo 44' a32efcf059a9
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac4374aea2aa a32efcf059a9 "docker-entrypoint.s…" 12 seconds ago Exited (127) 9 seconds ago elastic_lichterman
65860beb10b5 a32efcf059a9 "docker-entrypoint.s…" About a minute ago Exited (127) About a minute ago gracious_fermi
当docker启动时:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
€:如果我从docker桌面启动我的容器,我得到这个:
invalid reference format
你的Dockerfile有几个问题。您使用的CMD语法不正确。此外,对于NodeJS,您应该定义WORKDIR。您还需要安装processenv
包。
它应该工作,如果你替换你的Dockerfile:
FROM node:16.13.0-alpine
WORKDIR /opt/app
RUN npm install processenv
ADD app.js /opt/app
CMD ["node", "app.js"]
你可以用下面的命令来运行它:
docker build -t nodejsapp . && docker run -d -p 3000:3000 -e MESSAGE='Hallo 44' nodejsapp