由于网络问题,Docker 无法使用 VPN

dsp*_*ejs 5 vpn docker

出于某种原因,我的 VPN (NordVPN) 干扰了 Docker:

make start
docker-compose -f docker-compose/docker-compose.base.yml -f docker-compose/docker-compose.dev.yml up -d
doCreating network "docker-compose_default" with the default driver
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
cmake: *** [Makefile:59: up_dev] Error 1
Run Code Online (Sandbox Code Playgroud)

问题似乎与网络有关。不过,我不确定如何对其进行故障排除或修复。禁用我的 VPN 并运行后sudo systemctl restart docker,Docker 工作正常。

环境

  • Ubuntu 20.04 LTS
  • Docker 版本 19.03.8,构建 afacb8b7f0
  • NordVPN 版本 3.7.4

Pie*_*ero 14

这对我有用。停止正在运行的容器并尝试

docker network prune

注意:谨慎使用


acr*_*ran 11

TL; 博士

这里的问题是docker/docker-compose无法找到合适的地址范围来将子网分配给新的内部网络,因为 VPN 为所有 IP 地址添加了路由。

解决方案:

  1. 手动定义网络和它的地址范围docker-compose.yml,也可以使用现有的一个=>要求在所有的更改docker-compose.yml文件,这也可能成为几乎不便携式由于硬编码地址。
  2. docker在 VPN 之前启动/所有服务 => 可能并非在所有情况下都可行
  3. 重新配置您的 VPN 的路由配置以排除 docker 使用的范围=> 会增加您的 VPN 配置的复杂性,并且如果操作错误可能会泄漏用于 VPN 的流量

解释

默认情况下docker-compose docker network为每个项目设置一个专用的,即 docker 主机上的虚拟网桥设备。

要为网络分配子网范围和网关地址,请docker尝试从可能的范围池中选择一个范围。它检查所选范围是否与已绑定到连接的网络设备的范围/路由重叠,以防止主机使用的地址范围发生冲突。

另一方面,VPN 可能会添加自己的路由,以便通过 VPN 隧道重定向所有流量。因此docker将无法找到“未使用”的地址范围来分配给新网络。

有关更多信息,请参阅此问题的答案以及GitHub 上相应问题