从networking中的外部机器访问Docker

是否可以从外部设备访问docker服务? 我通过无花果build立了服务,并暴露了端口3000.我使用了docker-osx的fig,所以docker在virtualbox中运行。

现在我需要访问从外部设备(即手机或平板电脑)提供的服务。

目前我只能从托pipeVirtualBox-Environment的机器上访问localdocker:3000的服务。

您必须告诉您的本地机器侦听该端口上的传入连接,然后将这些请求转发到您的Docker容器。

Nginx在这方面相当不错,而且是一个简单的configuration:

/etc/nginx/sites-enabled/your-file.conf

server { listen 3000; server_name YOUR_IP_ADDRESS; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://127.0.0.1:3000; } } 

如果您的手机/平板电脑点击http://YOUR_IP_ADDRESS:3000/

对于那些使用OSX(和Windows)进行testing的人,Docker会创build一个虚拟机; 这与在基于Linux的系统上运行有点不同。

尝试以下操作:

docker-machine ip

这将返回虚拟机的IP。 在我的例子中,

 192.168.99.100 

运行docker ps会显示你的端口映射(清理下面的表格)

 $ docker ps CONTAINER ID IMAGE STATUS PORTS NAMES 42f88ac00e6f nginx-local Up 30 seconds 0.0.0.0:32778->80/tcp 

0.0.0.0:32778->80/tcp表示docker正在我的机器上(这里是虚拟机)映射32778(一个随机分配的端口)到我的容器的端口80。

您也可以从docker port 42f88ac00e6f 80 (42f88ac00e6f是容器ID或名称)

为了访问容器上的nginx,我现在可以使用虚拟机的ip:32778

http://192.168.99.100:32778/将转发到我的docker集装箱的80端口(我用它来本地testing)

显然,上面的端口不能从networking访问,但你可以configuration你的防火墙转发给它=)

我build议将端口转发规则添加到VirtualBox VM设置。

打开虚拟机设置=>networking选项卡=>适配器1.默认情况下,它连接到NAT。
按端口转发button,然后添加新的规则。
主机IP应该是您的计算机IP地址。 也可以是127.0.0.1,但只有在您的计算机上才能看到。
对于“主机端口”值,您需要尝试一下 – 需要被计算机防火墙使用和允许。
留下来宾IP为空。
访客端口应该是3000,就像你的问题一样。

之后,应该可以从本地networking访问,地址为http:// HOST_IP:HOST_PORT

您应该可以使用book2docker ip报告的IP地址访问boot2docker book2docker ip