在我们的团队中,我们目前正在过渡到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发行版。
我将非常感谢您的帮助!
答案 0 :(得分:6)
使用docker prune命令后,我无法在网络上启动docker容器。
指出以下错误:
错误:表示jekyll-serve无法启动服务jekyll-serve:网络 b52287167caf352c7a03c4e924aaf7d78e2bc372c703560c003acc758c013432不是 发现 错误:在启动项目时遇到错误。
docker system prune
使我得以再次开始使用docker-compose up
。
答案 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 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)
旧容器仍在使用旧网络。可能您删除了网络,但忘记了使用旧容器。只需删除旧容器,创建网络并重新构建即可。