在Mac上访问Docker转发端口

时间:2016-04-11 14:24:00

标签: macos docker port forwarding

此处有相关帖子:Port mapping in Docker on Mac OSX installed with Docker Toolbox

但它对我不起作用

获取容器的端口

docker port 485186e65a5e

8080/tcp -> 0.0.0.0:33360
8088/tcp -> 0.0.0.0:33359
19888/tcp -> 0.0.0.0:33358
50070/tcp -> 0.0.0.0:33357
50075/tcp -> 0.0.0.0:33356
8042/tcp -> 0.0.0.0:33361

检查是否有人收听了容器中的端口

bash-4.1# netstat -alnpt | grep 19888
tcp        0      0 127.0.0.1:19888             0.0.0.0:*                   LISTEN      1094/java   

在容器中执行wget

bash-4.1# wget 127.0.0.1:19888
--2016-04-11 14:16:54--  http://127.0.0.1:19888/
Connecting to 127.0.0.1:19888... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://127.0.0.1:19888/jobhistory [following]
--2016-04-11 14:16:54--  http://127.0.0.1:19888/jobhistory
Reusing existing connection to 127.0.0.1:19888.
HTTP request sent, awaiting response... 200 OK
Length: 6763 (6.6K) [text/html]
Saving to: `index.html'

100%[================================================================================================================================================================================>] 6,763       --.-K/s   in 0s      

2016-04-11 14:16:54 (182 MB/s) - `index.html' saved [6763/6763]

尝试从主机访问转发端口,没有运气...... :((

$docker-machine ip default
192.168.99.100
$ wget 192.168.99.100:33358
--2016-04-11 16:18:04--  http://192.168.99.100:33358/
Connecting to 192.168.99.100:33358... failed: Connection refused.

我做错了什么?

2 个答案:

答案 0 :(得分:3)

Omg,所需的服务在容器中的 127.0.0.1 上开始,这就是为什么它从外部世界不可见。我已将服务配置修改为从0.0.0.0开始,现在我可以访问转发的容器端口

答案 1 :(得分:1)

我遇到了同样的问题,并且能够通过指定容器中服务器使用的主机来修复它。

注意:在下面使用主机时,它表示Web服务器主机。当我使用主机时,我的意思是我正在使用的主要操作系统(即不是容器或网络服务器,只是我的笔记本电脑作为机器)

问题

webpack-dev-serverhttp-server等容器上运行网络服务器会使用http://localhost的主机自动运行该应用。通常,当您启动服务器时,您将在输出中看到它。类似的东西:

Project is running at http://localhost:8080

Server available at http://127.0.0.1:8080

在大多数机器上,localhost127.0.0.1都是一样的。此主机无法公开查看。因此,即使它在正确的位置,您的主机也看不到任何东西。

<强>解决方案

在容器内运行服务器时,应指定公共主机。

webpack-dev-server --port 8080 --host 0.0.0.0

http-server -p 8080 -a 0.0.0.0

由于0.0.0.0地址可供任何外部计算机查看,因此您应该能够看到您的应用在主机上按预期工作。

注意:这适用于任何服务器,例如Python的SimpleHTTPServer等。只需在文档中查找如何更改所选服务器的主机

<强>资源/ Nods的 (如何使用可公开访问的主机运行webpack-dev-erver)[How to make the webpack dev server run on port 80 and on 0.0.0.0 to make it publicly accessible?