我的Node.js socket.io 简单的服务器在由 docker run 运行时无法正常工作



当我直接按类型npm startnode index.js运行时,127.0.0.1:4444站点页面将成功打开。但是,如果我使用Docker使其能够与EC2一起运行,它可以在我的PC上运行,但无法打开网站127.0.0.1:4444

这是我的密码。

index.js

var app = require('http').createServer(handler)
var fs = require('fs');
app.listen(4444);
function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
      if (err) {
      res.writeHead(500);
           return res.end('Error loading index.html');
      }
      res.writeHead(200);
      res.end(data);
  });
}
var io = require('socket.io')(app);
io.on('connection', function (socket) {
  console.log('Hello, socket.io~');
});

Dockerfile

FROM node:12
COPY package.json /src/package.json
RUN cd /src
RUN npm install
RUN npm install socket.io
COPY . /src
WORKDIR /src
CMD ["npm", "start"]

package.json

{
  "name": "hahaha",
  "version": "12.19.0",
  "description": "my first socket.io",
  "main": "index.js",
  "dependencies": {
    "socket.io": "^2.3.0"
  },
  "devDependencies": {},
  "scripts": {
    "start" : "node index.js"
  },
  "author": "",
  "license": "ISC"
}

.dokerignore

node_modules/

和全路径图像路径

请帮帮我。

尝试在dockerfile中公开端口4444。

https://docs.docker.com/engine/reference/builder/#expose

当Mario的答案-EXPOSE 4444和camba1的答案-p 4444:4444时,它没有起作用,但当我同时使用它时,这意味着,我写了EXPOSE 4424并构建了运行-p 444:4444。-