docker compose -p myapp down --remove-orphans
docker network ls | grep myapp
docker network rm myapp_default
docker compose -p myapp up -d

docker compose up 时报 network myapp_default declared as external, but could not be found,提示改过之后又说网络已存在,docker network ls 里那个网络下面根本没有容器,重启 daemon 也不消失,手册上的命令也没用。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,上次 down 没清干净或者项目名被改过,旧网络就留在 daemon 里,新 compose 按项目名前缀去查找,状态对不上直接报错,和容器本身无关,先清网络再说。

「compose 网络残留」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

处理上按这个顺序:先确认 compose 用的项目名和网络名前缀 看和报错里的是否一致;把没有容器引用的旧网络用 network rm 手工删掉 删完再确认一次;执行 down 的时候带上 –remove-orphans 参数把残留一起清理 别留尾巴。

改完只确认一件事:网络重建后容器都能拿到 IP,compose ps 里服务全部 running,重启一次也不会再报网络错误。

作者 9823189