代码之家  ›  专栏  ›  技术社区  ›  borchero

找不到Docker网络

  •  15
  • borchero  · 技术社区  · 7 年前

    在我们的团队中,我们目前正在过渡到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 <id> 总是导致以下结果:

    Error response from daemon: network <id> not found
    

    更奇怪的是 docker network inspect <id> 返回正常输出。网络总是 overlay 使用用于部署堆栈的合成文件创建的网络。目前,我们群中只有一个节点。

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

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

    我非常感谢你的帮助!

    2 回复  |  直到 7 年前
        1
  •  12
  •   JoSSte mirik    7 年前

    你总是可以用 docker system prune -a 为了摆脱旧的网络。这不会删除卷。
    要花更长的时间 docker-compose up --build -d 下一次,但它会帮你解决当前的问题。

        2
  •  7
  •   Nick Beaird    7 年前

    如果试图向不再存在的现有网络添加容器,则可以使用 docker-compose up --force-recreate . 我找到这个了 GitHub issues comment 作为一个有用的概述。

        3
  •  3
  •   Julio Daniel Reyes    7 年前

    听起来很像 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
    
        4
  •  -1
  •   joaoluiznaufel    7 年前

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

    推荐文章