在Mac上访问Docker转发的端口

Bam*_*ylo 2 macos port forwarding docker

这里有一篇相关的文章:通过Docker Toolbox安装的Mac OSX上的Docker中的端口映射

但这对我没用

获取容器的端口

码头工人端口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
Run Code Online (Sandbox Code Playgroud)

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

bash-4.1# netstat -alnpt | grep 19888
tcp        0      0 127.0.0.1:19888             0.0.0.0:*                   LISTEN      1094/java   
Run Code Online (Sandbox Code Playgroud)

在容器中放入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]
Run Code Online (Sandbox Code Playgroud)

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

$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.
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

mep*_*ler 7

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

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

问题

在容器上运行 Web 服务器,例如webpack-dev-server使用http-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)[如何使 webpack 开发服务器在端口 80 和 0.0.0.0 上运行以使其可公开访问?


Bam*_*ylo 5

天哪,所需的服务始于127.0.0.1的容器中,这就是为什么它在外界看不到的原因。我已经修改了服务配置以从0.0.0.0开始,现在我可以访问转发的容器端口