【问题标题】:Docker Network not Found未找到 Docker 网络
【发布时间】:2019-04-20 05:42:38
【问题描述】:

在我们的团队中,我们目前正在过渡到 Docker 以在我们的服务器上部署所有内容。

我们正在使用 Docker Swarm 和多个 (10+) 组合文件来定义大量 (20+) 服务。到目前为止,一切都运行良好,除非我们使用 docker stack rm <name> 删除我们的堆栈(并使用 docker stack deploy <options> <name> 重新部署):大约每两次,我们都会收到以下错误:

Failed to remove network <id>: Error response from daemon: network <id> not foundFailed to remove some resources from stack: <name>

当使用docker network ls时,网络确实没有被移除,但是docker network rm &lt;id&gt;总是会导致以下结果:

Error response from daemon: network <id> not found

更奇怪的是docker network inspect &lt;id&gt; 返回一个正常的输出。网络始终是overlay 网络,它们是使用用于部署我们的堆栈的 compose 文件创建的。目前,我们的 Swarm 中只有一个节点。

我们当前的“解决方法”是重新启动 Docker(这解决了问题),但这在生产环境中不是一个可行的解决方案。离开蜂群并再次加入它也不能解决问题。

起初,我们认为这个问题仅与 Docker for Mac 相关(因为我们第一次在本地机器上遇到了这个问题),然而,同样的问题出现在 Debian Stretch 上。在这两种情况下,我们都使用可用的最新 Docker 发行版。

非常感谢任何帮助!

【问题讨论】:

  • 您是否检查过使用此网络的所有容器是否都没有运行?堆栈 rm 发出命令立即删除所有服务,但容器本身需要一些时间。另外,网络是否有任何配置? IPAM,具体的驱动程序?

标签: docker docker-swarm docker-networking


【解决方案1】:

如果您尝试将容器添加到不再存在的现有网络,则可以使用docker-compose up --force-recreate。我发现这个GitHub issues comment 是一个有用的概述。

【讨论】:

    【解决方案2】:

    您可以随时使用docker system prune -a 摆脱旧网络。这不会删除您的卷。
    下次到docker-compose up --build -d 需要更长的时间,但它会让您解决当前的问题。

    【讨论】:

    • docker system prune -a 将删除所有现有的图像和容器。不要使用!
    • 确实如此。不确定额外的 -a 有什么用处,因为没有它也一样。
    【解决方案3】:

    使用 docker prune 命令后,我无法在网络上启动 docker 容器。

    声明以下错误:

    错误: for jekyll-serve 无法启动服务 jekyll-serve:网络 b52287167caf352c7a03c4e924aaf7d78e2bc372c703560c003acc758c013432 不是 成立 错误:在启动项目时遇到错误。

    docker system prune 使我能够再次开始使用docker-compose up

    更多信息在这里:https://docs.docker.com/config/pruning/

    【讨论】:

      【解决方案4】:

      听起来很像this issue

      堆栈 rm 跟随堆栈部署“太快”会竞相创建/删除网络,可能还有其他堆栈资源。

      截至今天 (docker/cli),该问题仍然存在,但您可以尝试建议的解决方法:

      until [ -z "$(docker service ls --filter label=com.docker.stack.namespace=$COMPOSE_PROJECT_NAME -q)" ] || [ "$limit" -lt 0 ]; do
        sleep 1;
      done
      
      until [ -z "$(docker network ls --filter label=com.docker.stack.namespace=$COMPOSE_PROJECT_NAME -q)" ] || [ "$limit" -lt 0 ]; do
        sleep 1;
      done
      

      【讨论】:

      • 不幸的是,这并没有解决问题..当我在脚本中使用这段代码时,它陷入了无限循环,因为(至少)一个网络从不已删除。
      • 嗯...here 又是同样的问题,仍然存在。他们还建议重启守护进程,你在测试脚本之前这样做了吗?
      • 还说实际删除网络需要一段时间,您可以尝试运行几分钟吗?
      • 是的,正如我的问题中所指出的那样,重新启动守护进程是我的“硬修复”,但它确实看起来有点奇怪。
      • 运行了大约 10 分钟,但没有完成。当我运行docker network ls 时,其中一个网络仍然可见,在移除堆栈后超过 30 分钟。但我想目前似乎没有解决问题的方法(基于您链接的问题)。
      【解决方案5】:

      我无法通过之前答案中的任何方法摆脱网络。

      这对我有用。

      systemctl restart docker
      

      【讨论】:

      • 这个解决方法是在原来的问题顺便说一句,虽然不太明确。
      【解决方案6】:

      删除docker中的“网络未找到”

      检查我们无法删除的网络

      docker network inspect <id> or <name>
      

      断开网络

      docker network disconnect -f <networkID> <endpointName> or <endpointId>
      

      删除未使用的网络

      docker network prune
      

      【讨论】:

      • 有人测试过吗?
      • 这应该是公认的答案。我自动化了这个解决方案,并在每次我有一个幽灵网络时触发它。工作得很好。
      • 为了得到这个答案,我花了将近 4 个小时来找出它为什么会发生以及如何解决它。
      【解决方案7】:

      旧容器仍在使用旧网络。可能您删除了网络但忘记 rm 旧容器。只需删除旧容器,创建网络并重新构建。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 2015-09-09
        • 1970-01-01
        • 2012-06-18
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多