docker - 在 docker 容器上访问服务器时出现问题

标签 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 上的服务器。

怎么了?

最佳答案

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

  • 您需要从 docker 主机
  • 映射端口
  • 您需要将您的服务器绑定(bind)到 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 :

    The EXPOSE instruction does not actually publish the port. It functions as a type of documentation between the person who builds the image and the person who runs the container, about which ports are intended to be published

    关于docker - 在 docker 容器上访问服务器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58560990/

    相关文章:

    docker - 如何使用 Dockerfile 进行 docker 构建?

    amazon-web-services - 如何使用 Amazon ECS 从 Tutum 私有(private)注册表中提取 Docker 镜像?

    docker - Kubernetes - 未启用 - 桌面版 Docker(Windows 10)但 "kubectl cluster-info"可以工作吗?为什么?

    linux - 如何在 Windows Server 2016 上运行 Linux Docker 镜像?

    python - docker-compose exec : \"webserver\": executable file not found in $PATH

    maven - Jenkins 配置文件提供程序插件如何工作?

    docker - 没有合适的节点 - 无法使用 docker 服务部署镜像

    Docker swarm 有一些共享卷

    linux - 如何使用make和kubernetes实现distcc?

    docker - SonarQube 不会将 waitForQualityGate() 的状态返回给 Jenkins ?