陈同学
微服务
Accelerator
About
# Mac 如何访问容器网络 > [Networking features in Docker Desktop for Mac](https://docs.docker.com/docker-for-mac/networking/) 今天做一个小实验时发现Mac没有 **docker0** 网卡,导致无法直接访问容器网络,记录一下。 在 Mac 上安装 Docker Desktop for Mac,由于 Mac 网卡实现的原因,Mac 不会像Linux系统一样会创建 **docker0** 网卡,因此 Mac 下无法直接访问容器。 普通场景可发布端口到host,例如: ```bash docker run -d --name nginx -p 80:80 nginx ``` 可以通过本机80端口访问。 但很多场景下,应用会自动抓容器的IP并访问,做端口映射没什么用,此时可以自己配下路由。 下面举个例子,容器运行在虚拟机中,Mac访问虚拟机中的容器。 先在虚拟机启动一个nginx,容器IP为172.17.0.8,此时Mac无法访问该IP。 ```bash docker run -d --name nginx nginx ``` 虚拟机的IP为192.168.134.178,本机可访问虚拟机,**netstat -r** 查看本机路由表: ``` Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default gateway 0.0.0.0 UG 0 0 0 ens33 192.168.134.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 ``` 192.168.134.0/8 这个网段是通过本机(0.0.0.0)作为网关进行转发的。 在本机访问容器网络 **172.17.0.0/16** 时,通过虚拟机 **192.168.134.178** 作为网关进行处理即可。 ```bash sudo route -n add -net 172.17.0.0/16 192.168.134.178 ``` 此时,telnet 一下容器中的80端口,是可以连接上的。 ```bash $telnet 172.17.0.8 80 Trying 172.17.0.8... Connected to 172.17.0.8. Escape character is '^]'. ``` 看下下报文走向,确实是通过虚拟机作为网关的。 ```bash $traceroute 172.17.0.8 traceroute to 172.17.0.8 (172.17.0.8), 64 hops max, 52 byte packets 1 192.168.134.178 (192.168.134.178) 1.653 ms 0.318 ms 0.226 ms 2 172.17.0.8 (172.17.0.8) 0.222 ms 0.224 ms 0.255 ms ```
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
Mac 如何访问容器网络
文章链接:
https://chenyongjun.vip/articles/120
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力