8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

容器化节点服务器无法通过 server.listen(port, '127.0.0.1') 访问

simeone.lettiero_w 1月前

13 0

我在Docker 中设置了一个简单的 Node 服务器。DockerfileFROM node:latestRUN apt-get -y updateADD example.js .EXPOSE 1337 CMD node example.jsexample.jsvar http = require('http');http.createSer...

我在 Docker 中建立了一个简单的 Node 服务器。

Dockerfile

FROM node:latest
RUN apt-get -y update
ADD example.js .
EXPOSE 1337   
CMD node example.js

例子.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n'+new Date);
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

现在构建图像

$ docker build -t node_server .

现在在容器中运行

$ docker run -p 1337:1337 -d node_server  
$ 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70

验证容器正在运行并且端口已映射:

$ docker ps  

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
5909e87302ab        node_server         "/bin/sh -c 'node exa"   7 seconds ago       Up 6 seconds        0.0.0.0:1337->1337/tcp   grave_goldberg

现在让我们连接到容器并验证服务器是否在里面运行:

$ docker exec -it 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70 /bin/bash 

并在容器命令行中输入:

root@5909e87302ab:/# curl http://localhost:1337
Hello World
Mon Feb 15 2016 16:28:38 GMT+0000 (UTC)

看上去不错吧?

问题

当我在主机上执行相同的 curl 命令(或使用浏览器导航到 http://localhost:1337)时,我什么也看不到。

知道为什么容器和主机之间的端口映射不起作用吗?

我已经尝试过的事情:

  • 旗帜 --expose 1337 奔跑
帖子版权声明 1、本帖标题:容器化节点服务器无法通过 server.listen(port, '127.0.0.1') 访问
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由simeone.lettiero_w在本站《http》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您的端口已正确公开,但您的服务器正在监听 127.0.0.1 容器内部的连接:

    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World\n'+new Date);
    }).listen(1337, '127.0.0.1');
    

    您需要像这样运行您的服务器:

    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World\n'+new Date);
    }).listen(1337, '0.0.0.0');
    

    请注意,是 0.0.0.0,而不是 127.0.0.1。

返回
作者最近主题: