MacOS下多终端并行执行Docker Build随机失败问题求助
Docker远程并行构建随机失败问题解析与解决
错误含义
这个错误本质是远程Docker上下文的并发会话竞争或连接超时:
- 当多个构建任务通过
--context并行连接到同一远程Docker服务器时,BuildKit的会话管理机制无法同时处理过多并发会话,导致部分会话在读取Dockerfile时找不到活跃会话实例,最终触发超时。 - 串行执行时无并发竞争,会话可依次正常建立处理,因此不会出现错误。
解决办法
结合你不想用Swarm、不想维护镜像仓库的需求,推荐以下方案:
1. 限制并行构建数量
避免同时启动6个构建任务,用工具控制并发数或分散启动时间:
- 使用
parallel命令限制并发(比如设为2):
parallel -j 2 ttab {} ::: build_and_deploy_web_1.sh build_and_deploy_web_2.sh build_and_deploy_web_3.sh build_and_deploy_web_4.sh build_and_deploy_web_1_backup.sh build_and_deploy_web_2_backup.sh
- 给
ttab添加启动延迟:
ttab build_and_deploy_web_1.sh sleep 2 ttab build_and_deploy_web_2.sh sleep 2 ttab build_and_deploy_web_3.sh sleep 2 ttab build_and_deploy_web_4.sh sleep 2 ttab build_and_deploy_web_1_backup.sh sleep 2 ttab build_and_deploy_web_2_backup.sh
2. 延长BuildKit超时时间
在每个子脚本开头添加环境变量,给会话足够的处理时间:
export BUILDKIT_TIMEOUT=300 # 单位:秒,设置为5分钟
3. 优化远程Docker服务器配置
编辑远程服务器的/etc/docker/daemon.json,调整并发资源限制:
{ "features": { "buildkit": true }, "max-concurrent-downloads": 10, "max-concurrent-uploads": 5, "builder": { "gc": { "enabled": true } } }
修改后重启Docker daemon:
systemctl restart docker
4. 复用公共镜像构建
多个子脚本重复构建common/postfix,可预先单独构建一次,后续子脚本直接复用:
在主脚本开头先执行公共镜像构建:
DOCKER_BUILDKIT=1 docker --context php-pos-web-2 build --platform=linux/amd64 -t common/postfix ../common/postfix
然后删除所有子脚本中重复的common/postfix构建命令。
内容的提问来源于stack exchange,提问作者Chris Muench
相关产品推荐
相关产品推荐

