Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker网络未暴露于Windows上的主机_Docker_Docker Compose_Hyper V_Docker For Windows - Fatal编程技术网

Docker网络未暴露于Windows上的主机

Docker网络未暴露于Windows上的主机,docker,docker-compose,hyper-v,docker-for-windows,Docker,Docker Compose,Hyper V,Docker For Windows,我在docker-compose.yml中有ngnix服务和网络的基本配置 version: '3' services: nginx: build: ./docker/nginx networks: eznet: ipv4_address: 172.21.20.30 ports: - 80:80 volumes: - ./

我在docker-compose.yml中有ngnix服务和网络的基本配置

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上,docker compose将在172.21.20.x子网中创建虚拟网络接口,并在172.21.20.30上访问ngnix。这对我的开发团队非常有用,我们使用它来组织多个项目

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

我已尝试更改Docker执事设置,我已添加

{
    "bridge": "none"
}
到daemon config,该配置本应阻止docker创建其默认网络(DockerNet),并强制其将所有网络公开为主机上可见的接口,但未做任何更改


是否有办法使用docker for Windows在主机上公开docker网络?

无法从主机访问docker for Windows/Mac容器网络

Docker在运行于HyperV的Alpine Linux虚拟机的网桥上创建了自己的网络。这些网络不向VM主机公开。对容器的唯一网络访问是通过映射的TCP或UDP端口

有一些方法可以设置可以访问的虚拟机,但通常需要使用自定义虚拟机,而不是Docker for Windows/Mac(或),因为Docker虚拟机不太可定制(它们的目标是易于使用/设置)

  • 创建具有到主机的网络路由的Docker VM

    为VM创建一个虚拟机

    在VirtualBox上,可以使用桥接适配器。也可以通过仅主机的网络适配器进行设置,但可能会有点复杂,因为大多数容器需要internet访问,所以需要第二个适配器

  • Ping Docker虚拟机

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

    C:\> ping 192.168.98.30
    
  • 确保在Docker VM中启用了IP路由

    将IP转发添加到sysctl(
    /etc/sysctl.d/99 sysctl.conf
    在Debian上)

    然后重新加载sysctl文件以获取配置

    sysctl --system
    
  • 通过VM向专用Docker网络添加路由

    现在告诉您的虚拟机主机如何访问Docker网络

    route -p ADD 172.21.20.0 MASK 255.255.255.0 192.168.98.30
    

  • 我这样做主要是为了在HyperV术语关闭时表示歉意。My更进一步,创建一个连接到仅主机网络的完整网桥,以便容器可以连接到网桥并直接从主机访问。

    Docker for Windows/Mac容器网络无法从主机访问

    Docker在运行于HyperV的Alpine Linux虚拟机的网桥上创建了自己的网络。这些网络不向VM主机公开。对容器的唯一网络访问是通过映射的TCP或UDP端口

    有一些方法可以设置可以访问的虚拟机,但通常需要使用自定义虚拟机,而不是Docker for Windows/Mac(或),因为Docker虚拟机不太可定制(它们的目标是易于使用/设置)

  • 创建具有到主机的网络路由的Docker VM

    为VM创建一个虚拟机

    在VirtualBox上,可以使用桥接适配器。也可以通过仅主机的网络适配器进行设置,但可能会有点复杂,因为大多数容器需要internet访问,所以需要第二个适配器

  • Ping Docker虚拟机

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

    C:\> ping 192.168.98.30
    
  • 确保在Docker VM中启用了IP路由

    将IP转发添加到sysctl(
    /etc/sysctl.d/99 sysctl.conf
    在Debian上)

    然后重新加载sysctl文件以获取配置

    sysctl --system
    
  • 通过VM向专用Docker网络添加路由

    现在告诉您的虚拟机主机如何访问Docker网络

    route -p ADD 172.21.20.0 MASK 255.255.255.0 192.168.98.30
    

  • 我这样做主要是为了在HyperV术语关闭时表示歉意。My更进一步,创建一个连接到仅主机网络的完整网桥,以便容器可以连接到网桥并直接从主机访问。

    我使用VirtualBox上的Vagrant for Docker Toolbox创建了非常类似的解决方案:)(每个项目都有单独的vm)。如果我有时间,我将研究使用Vagrant和docker机器工作流的hyper-v/MobyVM网络或架构,但目前它对我来说优先级较低。我在VirtualBox上使用Vagrant for docker Toolbox创建了非常类似的解决方法:)(每个项目都有单独的vm)。如果我有时间,我将研究使用Vagrant和docker机器工作流的hyper-v/MobyVM网络或架构,但目前对我来说优先级较低。