18

是否可以从外部设备访问 docker 服务?我通过 fig 构建了服务并暴露了 3000 端口。我将 fig 与 docker-osx 一起使用,因此 docker 在 vi​​rtualbox 中运行。

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

目前,我只能从托管 VirtualBox-Environment 的机器上使用 localdocker:3000 访问该服务。

4

5 回答 5

22

对于那些使用 OSX(和 Windows)进行测试的人,Docker 创建了一个虚拟机;这与在基于 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 端口(我用这个在本地测试)

显然,上面的端口将无法从网络访问,但您可以将防火墙配置为转发到它 =)

于 2016-04-12T08:31:59.970 回答
15

我建议在 VirtualBox VM 设置中添加端口转发规则。

打开 VM 设置 => 网络选项卡 => 适配器 1。默认情况下,它连接到 NAT。
按端口转发按钮,然后添加新规则。
主机 IP 应该是您的计算机 IP 地址。也可以是 127.0.0.1,但它只能在您的计算机上看到。
对于主机端口值,您需要进行一些试验 - 需要既未使用又被计算机防火墙允许。
将访客 IP 留空。
如您的问题所示,访客端口应为 3000。

之后,它应该可以从本地网络访问,地址http://HOST_IP:HOST_PORT

于 2016-04-29T12:18:12.333 回答
8

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

Nginx在这方面做得很好,一个简单的配置如下:

/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/

于 2014-08-15T17:13:26.780 回答
1

对于 MacOs 用户。

似乎sudo ifconfig lo0 alias 10.254.254.254会变魔术。您可以从容器访问外部 IP 主机(10.254.254.254)

于 2018-07-25T10:25:37.687 回答
0

您应该能够通过使用报告的 IP 地址访问 boot2docker vm book2docker ip

于 2014-08-15T16:43:13.663 回答