Docker Desktop Windows 和 *** - 容器内没有网络连接
Posted
技术标签:
【中文标题】Docker Desktop Windows 和 *** - 容器内没有网络连接【英文标题】:Docker Desktop Windows and *** - no network connection inside container 【发布时间】:2020-07-07 04:47:21 【问题描述】:我正在尝试在连接到 *** 时在 Windows 上使用 Docker。
当 *** 未连接时,一切正常。
但是当我使用 Cisco AnyConnect 客户端连接到我们的公司 *** 时,docker 容器内的网络不再工作:
docker run alpine ping www.google.com
ping: bad address 'www.google.com'
docker run alpine ping -c 5 216.58.204.36
PING 216.58.204.36 (216.58.204.36): 56 data bytes
--- 216.58.204.36 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss
如何解决这个问题并让它发挥作用?
我的设置是:
Windows 10 版本 1809(操作系统内部版本 17763.1098) Docker 桌面社区 2.2.0.4 (43472):引擎 19.03.8、Compose 1.25.4、Kubernetes 1.15.5、Notary 0.6.1、Credential Helper 0.6.3 Docker 处于 Windows 容器模式,启用了实验性功能(需要同时运行 Windows 和 linux 映像)【问题讨论】:
你有没有想过这个问题的答案?我遇到了类似的问题,一直在尝试通过我的 Docker 桌面测试应用程序,但需要它通过 ***(也是 Cisco AnyConnect 客户端)连接到数据库 不幸的是,没有。但是纯 linux 模式下的 linux 容器在这种设置下工作得很好,所以我正在尝试完全迁移到 linux 容器。 重复:***.com/questions/56341873/…? @kuga,是的,看起来很相似 我也有类似的问题。我正在使用 mysql 和 karaf 容器,我连接到 VPM 并使用我的公共 ip 创建一个网络,但连接不起作用,因为我无法调用任何服务。 【参考方案1】:实际上我是使用 Docker Desktop 和 Hyper-V 虚拟机完成的。使用 OpenConnect,但我认为大多数 *** 客户端只需稍作修改即可完成。
完整解释的说明在此处Docker Desktop, Hyper-V and ***,其中包含 Docker 容器、Windows 虚拟机和 Linux 虚拟机的设置
我创建了一个新的内部虚拟交换机(我们称之为“内部”)并为其分配了一个静态 IP 地址(比如 192.168.4.2)
我使用 Ubuntu 服务器和 OpenConnect 创建了一个新 VM,连接到默认虚拟交换机和“内部”
在 OpenConnect 虚拟机上
分配给“内部”一个固定 ip (192.168.4.3)
添加了一个新的 tun 接口“persistent”,告诉 openconnect 使用该 tun(添加“-i tun0”参数作为 openconnect 启动参数)
sudo ip tuntap 添加名称 tun0 模式 tun
安装了persist-iptables
强制ip转发
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
设置路由
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT sudo iptables -A FORWARD -o tun0 -j ACCEPT sudo iptables -A FORWARD -i tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -i tun0 -j ACCEPT
连接 *** 后,我将 dns 服务器永久添加到 resolve.conf
并检索 *** 的地址类别(如 10...*)
在 Docker 容器上
在 Dockerfile 上添加了基本路由
运行路由添加 -net 10.0.0.0 网络掩码 255.0.0.0 gw 192.168.4.3
然后运行 docker 文件,我添加了 dns,授予 net admin 和 sys 模块权限
--dns 8.8.8.8 --dns 10.1.77.21 --dns 10.4.52.21 --dns-search test.dns.it --cap-add=NET_ADMIN --cap-add=SYS_MODULE
【讨论】:
恕我直言,使用 Hyper-V 已经不是最先进的了。要走的路是在 Windows 上使用 wsl2,而 Docker Desktop 同时默认使用。有人可以确认或否认 Docker Desktop 是否同时解决了功能中声称的 Cisco Any Connect 的 *** 问题? docs.docker.com/docker-for-windows/networking/#features - 如果没有,这可能是一个选项:github.com/sakai135/wsl-***kit 实际上使用 GlobalProtect 5.2.3 和 WSL2 Docker Desktop 可以完美运行,没有任何问题。但我的新设置基于 docker 上的 openconnect,各种 *** 服务在同一个 docker 网络中运行并通过 docker open*** 服务器访问:P 原因是进行一些 dns 劫持等以上是关于Docker Desktop Windows 和 *** - 容器内没有网络连接的主要内容,如果未能解决你的问题,请参考以下文章
Windows 进行 Docker CE 安装(Docker Desktop)
Windows 上配置Docker Desktop 的k8s
Docker Desktop 无法在 Windows 10 上启动 docker 守护进程
windows10 docker desktop与本机数据拷贝
解决Windows下Docker Failed to Start - Docker Desktop for Windows