在Docker容器上访问服务器问题

时间:2019-10-25 14:58:43

标签: docker

我正在尝试从以下站点上的示例构建并运行docker映像:https://kubernetes.io/docs/tutorials/hello-minikube/

//server.js
var http = require('http');

var handleRequest = function(request, response) {
   console.log('Received request for URL: ' + request.url);
   response.writeHead(200);
   response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);


//Dockerfile
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js

我使用命令

docker build -t nsj .
docker run nsj

它们运行时没有错误,但是我无法访问localhost:8080上的服务器。

怎么了?

1 个答案:

答案 0 :(得分:2)

似乎至少有两件事是错误的:

  1. 您需要从Docker主机映射端口
  2. 您需要将服务器绑定到0.0.0.0

因此,可能是这些变化(未经测试):

在您的代码中:

www.listen(8080, "0.0.0.0");

在您的docker命令中:

docker run nsj -p 8080:8080

请注意,您的EXPOSE 8080中有Dockerfile实际上并没有暴露任何东西。它只是在docker引擎的元数据中“标记”该端口,并且既用于文档(使读Dockerfile的人知道它的作用)又用于检查docker引擎的工具。

引用reference

  

EXPOSE指令实际上并未发布端口。它   充当构建者之间的一种文档类型   图片和运行容器的人,关于哪些端口是   打算出版