Docker端口未公开

我在Docker中设置了一个简单的节点服务器。

FROM node:latest

RUN apt-get -y update

ADD example.js .

EXPOSE 1337

CMD node example.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旗帜跑

回答:

端口正确暴露,但是服务器正在侦听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。

以上是 Docker端口未公开 的全部内容, 来源链接: utcz.com/qa/397331.html

回到顶部