2017-10-08 58 views
0

我在泊坞窗,compose.yml泊坞窗网不暴露托管在Windows

version: '3' 
services: 
    nginx: 
     build: ./docker/nginx 
     networks: 
      eznet: 
       ipv4_address: 172.21.20.30 
     ports: 
      - 80:80 
     volumes: 
      - ./logs/nginx/:/var/log/nginx 
      - ${APP_PATH}:/var/www/ 

networks: 
    eznet: 
     driver: bridge 
     ipam: 
      driver: default 
      config: 
       - subnet: 172.21.20.0/24 

在Linux泊坞窗,撰写ngnix服务和网络的基本配置将创建172.21.20.x虚拟网络接口子网,在172.21.20.30上可访问ngnix。这对我的开发团队非常有用,我们正在使用它来组织多个项目。

在运行docker-compose up -d后,Windows(基于hyperV的Docker for Windows)未创建新的网络接口。

我试图改变多克尔守护程序设置,我已经添加

{ 
    "bridge": "none" 
} 

到守护程序配置,这是应该避免码头工人从创建的默认网络(DockerNAT),并迫使其公开所有网络作为主机上可见的接口,但没有任何更改。

有什么方法可以让Docker for Windows在主机上公开Docker网络吗?

回答

1

用于Windows/Mac容器网络的Docker无法从主机访问。

Docker在HyperV中运行的Alpine Linux虚拟机的网桥上创建网络。这些网络不会暴露给VM主机。唯一的网络访问容器是通过映射的TCP或UDP端口。

有许多方法可以设置可以访问的虚拟机,但通常包括使用自定义虚拟机而不是Docker for Windows/Mac(或Docker Machine),因为Docker虚拟机不是非常可定制的(它们旨在便于使用/设置)。

  1. 使用到主机的网络路由创建Docker虚拟机。

    为VM创建一个"external network switch"

    在VirtualBox上会有桥接适配器。也可以通过仅主机网络适配器进行设置,但由于大多数容器需要互联网访问,因此可能会更复杂一点,因此需要第二个适配器。

  2. 平泊坞窗VM

    您应该能够从您的主机ping该虚拟机的主界面,反之亦然

    C:\> ping 192.168.98.30 
    
  3. 确保IP路由在泊坞VM开启

    添加IP转发sysctl相关(/etc/sysctl.d/99-sysctl.conf在Debian)

    net.ipv4.ip_forward=1 
    net.ipv6.conf.all.forwarding=1 
    

    然后重新装入sysctl的文件拿起配置

    sysctl --system 
    
  4. 通过VM

    私人码头工人网添加路由

    现在告诉你的VM主机怎么去泊坞窗网络。

    route -p ADD 172.21.20.0 MASK 255.255.255.0 192.168.98.30 
    

我这样做与Vagrant/Debian/VirtualBox主要所以道歉,如果Hyper-V的术语是关闭的。我的Vagrant setup通过创建一个连接到仅主机网络的整个网桥,使容器可以连接到网桥并直接从主机访问,从而更进一步。

+0

我在VirtualBox上为Docker Toolbox的Vagrant创建了非常类似的解决方法:)(我们为每个项目分别安装了vm)。如果我有时间,我会使用Vagrant和docker-machine工作流程来研究hyper-v/MobyVM网络的成果,但此时它对我来说是不重要的。 – McOffsky