从网络中的外部机器访问Docker

Dav*_*Geh 15 macos virtualbox docker fig

是否可以从外部设备访问docker服务?我通过无花果构建了服务并暴露了端口3000.我使用带有docker-osx的fig,因此docker在虚拟机内运行.

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

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

Abd*_*bdo 21

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

请尝试以下方法:

docker-machine ip

这将返回虚拟机的IP.在我的例子中,它是

192.168.99.100
Run Code Online (Sandbox Code Playgroud)

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

$ docker ps
CONTAINER ID        IMAGE                STATUS              PORTS                   NAMES
42f88ac00e6f        nginx-local          Up 30 seconds       0.0.0.0:32778->80/tcp
Run Code Online (Sandbox Code Playgroud)

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端口(我用它来测试本地)

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

  • 您是否可以添加有关如何配置防火墙以从本地网络访问容器端口的更新? (2认同)
  • 请注意,这些说明适用于Docker Toolbox,而不适用于Docker for Mac. (2认同)

小智 13

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

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

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


Chr*_*nel 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;                                            
    }                                                                         
} 
Run Code Online (Sandbox Code Playgroud)

如果您的手机/平板电脑点击,可以正常工作 http://YOUR_IP_ADDRESS:3000/