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

24

由于某种原因,我的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

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

环境

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

1
您可能已经创建了 Docker 的最大网络数量。请尝试使用 docker network prune 命令并重试。如果问题确实与 VPN 有关,请尝试 此链接 - Parth Shah
在我的情况下,docker network prune 解决了 macOS 10.15.2 和 ProtonVPN 1.9.0 的网络问题。Docker 在构建时会出现错误 ERROR [internal] load metadata,更准确地说是由于请求失败导致的 Service Unavailable,因此无法使用前端 dockerfile.v0 进行解决。 - Ava Barbilla
3个回答

23

简短概述

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

解决方案:

  1. docker-compose.yml文件中手动定义网络及其地址范围或使用一个现有的网络 => 需要在所有的docker-compose.yml文件中进行更改,这也可能会由于硬编码的地址而变得难以移植。
  2. 在VPN之前启动docker / 所有服务 => 可能不适用于所有情况
  3. 重新配置VPN的路由配置,排除要被docker使用的范围 => 将增加VPN配置的复杂性,并且如果操作不当,可能会导致意图用于VPN的流量泄漏。

解释

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

为了将子网范围和网关地址分配给网络,docker尝试从可能的范围池中选择一个范围。它检查所选范围是否与已绑定到连接的网络设备的范围/路由重叠,以防止主机使用冲突的地址范围出现问题。
另一方面,VPN可能会添加自己的路由,以通过VPN隧道重定向所有流量。因此,docker将无法找到“未使用”的地址范围来分配给新网络。
有关更多信息,请参见此问题的答案GitHub上的相关问题

14
这对我有用。停止正在运行的容器并尝试执行: docker network prune 注意:谨慎使用。

它对我有效!谢谢。 - Yassine ECHCHARAFI
不是我的问题,我以前可以连接到互联网,现在不行了 :| - Jorge Freitas
我不确定这与本地docker构建x.Dockerfile有什么关系,但当我这样做时,我的网络分辨率又开始工作了。我在VPN网络中有一个gitlab存储库,即使在VPN上,它也无法工作。我在本地机器上复制并粘贴了gitlab克隆URL(我正在运行docker构建的地方),它可以正常工作。我进行了网络清理,然后docker构建开始工作。我迷失了,但现在我被找到了:)谢谢! - Matthew Zackschewski
1
你刚刚救了我的一天!谢谢! - sdzt9

0

你可以尝试一下

docker-compose down

这将为您完成以下清理:

停止并删除容器、网络、镜像和卷


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接