找不到Docker网络

问题描述 投票:21回答:4

在我们的团队中,我们正在转换到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网络。目前,我们的Swarm中只有一个节点。

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

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

我真的很感激任何帮助!

docker docker-swarm docker-networking
4个回答
5
投票

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


3
投票

这听起来就像this issue

Stack 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

1
投票

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


-1
投票

旧容器仍在使用旧网络。可能你删除了网络,但忘记了旧容器。只需删除旧容器,创建网络并再次构建。

© www.soinside.com 2019 - 2024. All rights reserved.