Docker Desktop网络¶
Docker Desktop通用平台功能¶
在 Docker Desktop for Windows Atlas / Linux Atlas / ref:macos 各个平台都有一些共有的网络功能:
VPN 直通¶
Docker Desktop 网络可以直接附加到一个VPN上,此时 Docker Desktop 拦截来自容器的流量并将其注入主机,就好像他是来自Docker应用程序一样。在外部看来,就是Docker应用程序在使用VPN,外部不知道Dcoker应用程序中还运行了不同的容器。
端口映射(Port Mapping)¶
在运行容器时使用 -p
参数可以映射端口:
docker run -p 80:80 -d nginx
Docker Desktop 将物理主机的 localhost
端口80和容器端口80做了端口映射(Port Mapping),这样访问物理主机的 localhost:80
就能直接访问容器的 80
端口。当然,如果物理主机的 80
端口事先已经被其他应用占用,则可以使用其他本地主机端口,例如 localhost:8080
映射到容器端口 80
docker run -p 8080:80 -d nginx
配置Docker使用代理¶
Docker Desktop for Mac 和 Liinux的特定功能¶
SSH agent转发¶
在 Mac 和 Linux 上的 Docker Desktop 允许在容器内部使用host主机的 SSH agent,也就是将host主机的SSH agent socket 绑定到容器内部:
docker run ... --mount type=bind,src=/run/host-services/ssh-auth.sock,target=/run/host-services/ssh-auth.sock
然后在容器内部添加一个 SSH_AUTH_SCOCK
环境变量:
-e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock"
Docker Desktop的限制¶
host主机没有 docker0
网桥¶
由于 Docker Desktop
实际是一个Linux 虚拟机,所以在host主机上是看不到 docker0
网桥的,这个网桥在Linux虚拟机内部( Docker Desktop on Mac 虚拟机 )
尴尬: 不能ping容器¶
正因为 host主机没有 docker0
网桥,所以在host主机上其实无法直接访问Linux虚拟机内部的容器(包括我构建的 kind(本地docker模拟k8s集群) 各个工作节点(容器) )。
解决 Docker Desktop网络限制¶
要像常规Linux上运行Docker容器一样访问Docker容器的服务,唯一的方法是使用 端口映射(Port Mapping)
,例如 Docker Desktop for mac 端口转发(port forwarding)