Mac 下Docker无法访问外网与宿主机(解决办法和原因)

Mac 下Docker无法访问外网与宿主机(解决办法和原因)

产生原因

在找到原因之前,需要先了解,docker的网络配置

docker的网络配置

docker的网络配置分为四种, host,overlay,macvlan,bridge

  • host模式

    与宿主机共享网络,也就是在网络这块不会与宿主机隔离,而是共享宿主机的网络配置,并且容器不会分配自己的ip地址

    需要注意的是,因为容器是与宿主机共享网络,并且容器不存在自己的ip, 端口映射不生效, -p,--publish-P,和--publish-all都将被忽略,并产生一个警告

    WARNING: Published ports are discarded when using host network mode
    

    使用方法:

    在创建容器时添加如下配置

    --net host
    
  • overlay模式

    这个模式,楼主目前还没理解透,就不在这说,避免误导。我的理解是类似一个分布式集群网络。

    有兴趣的同学可以研究: https://docs.docker.com/network/overlay/

    如果有理解的同学或者发现有讲的不错的博客,欢迎留言,大家一起学习

  • macvlan模式

    直接连接宿主机的物理网络,为每个容器的虚拟网络接口分配MAC地址,相当于直接连接了宿主机的物理网络接口。

    但是使用改模式需要注意以下几点

    • 会导致宿主机上有大量的MAC地址
    • 需要宿主机支持一个物理接口分配多个MAC地址
    • 如果应用程序可以使用bridgeoverlay模式,那最好使用这两种方式建立网络
  • bridge模式(默认的网络模式)

    类似VMware的桥接网络,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。

Mac系统的限制

以下是Docker官方对MacOS的限制描述。

具体可参考: https://docs.docker.com/docker-for-mac/networking/

Mac 下Docker无法访问外网与宿主机(解决办法和原因)_第1张图片

原因总结

因为MacOS无法访问Docker桥接网络,而恰恰Docker默认是使用bridge模式,所以导致Docker无法联网,并且无法与宿主机沟通

解决办法

看自己Docker的实际需求采用不同的解决方案

  • VPN代理
  • 使用host模式
  • 端口映射

你可能感兴趣的:(Docker,docker,linux,macos)