找不到Docker网络

时间:2018-11-17 03:36:49

标签: docker docker-swarm docker-networking

在我们的团队中,我们目前正在过渡到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发行版。

我将非常感谢您的帮助!

8 个答案:

答案 0 :(得分:6)

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

指出以下错误:

错误:表示jekyll-serve无法启动服务jekyll-serve:网络 b52287167caf352c7a03c4e924aaf7d78e2bc372c703560c003acc758c013432不是 发现 错误:在启动项目时遇到错误。

docker system prune 使我得以再次开始使用docker-compose up

此处有更多信息:https://docs.docker.com/config/pruning/

答案 1 :(得分:4)

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

答案 2 :(得分:2)

听起来完全像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

答案 3 :(得分:1)

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

检查我们无法删除的网络

docker network inspect <id> or <name>

断开网络

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

删除未使用的网络

docker network prune

答案 4 :(得分:1)

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

这对我有用。

systemctl restart docker

答案 5 :(得分:0)

如果您试图将容器添加到已不存在的现有网络中,则可以使用var item = "Hide Copy Code QRSTUVWXYZ AAA BBBBBBB ABCD"; const int interval = 18; var words = item.Split(); var result = ""; var symbolsInCurrentLine = 0; foreach (var word in words) { if (word.Length + symbolsInCurrentLine > interval) // after adding word line will be longer than required { result += "\n"; symbolsInCurrentLine = 0; } else { if (symbolsInCurrentLine > 0) // add space after previous word if needed { result += " "; symbolsInCurrentLine++; } result += word; // append word symbolsInCurrentLine += word.Length; } } 。我发现此GitHub issues comment是有用的概述。

答案 6 :(得分:0)

sudo docker service restart

此命令将为您删除错误网络。

答案 7 :(得分:-1)

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