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 1​​92.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 11 安装 Docker Desktop

Windows 上配置Docker Desktop 的k8s

Docker Desktop 无法在 Windows 10 上启动 docker 守护进程

windows10 docker desktop与本机数据拷贝

解决Windows下Docker Failed to Start - Docker Desktop for Windows