1. docker for mac

不同于linux原生支持docker, windows和mac都需要一层虚拟机来支持docker, 因此使用方面也有了一定的限制, 参考 Networking features in Docker for Mac

1.1. macOS 没有 docker0 bridge

macOS现在对docker的虚拟化支持是由HyperKit实现的,因此网络接口也是在HyperKit里面,在macOS就看不到docker0 bridge

1.2. 主机和容器互访

  • 主机不能通过容器ip访问容器服务

linux中,主机可以通过容器的ip访问容器里面的服务,而mac的实现方式不同于linux,因此,容器所在的网络,对mac主机来说是不可达的。

  • 容器不能通过网关访问主机服务

2. 解决方案

2.1. 容器访问主机的服务

由于mac主机的ip可能经常变化,或者没有ip(在没有网络接入的情况下),因此容器通过mac主机的ip来访问主机服务就很不方便。推荐做法是:绑定一个不用的ip在mac的lo0接口上,如:sudo ifconfig lo0 alias 10.10.10.1/24, 然后确信你主机的服务监听在这个ip或0.0.0.0(而不是127.0.0.1),这样容器就可以访问主机的服务了。

2.2. 主机访问容器的服务

实现主机访问容器的服务,可以通过docker-p参数实现端口映射,从而实现主机访问容器的服务, 如: docker run -d -p 80:80 --name webserver nginx

results matching ""

    No results matching ""