Docker-compose任务失败但GitHub Workflow仍显示成功的原因排查
问题原因
默认情况下,docker-compose up的退出码不等于容器的退出码——只有当它自身执行出错(比如找不到配置文件、镜像构建失败)时才会返回非零值。哪怕容器运行失败退出码是2,docker-compose up本身可能依然返回0,导致GitHub Workflow误以为这个步骤执行成功。
解决方案
修改复杂度检查步骤的docker-compose命令,加上--abort-on-container-exit和--exit-code-from complexity参数,让docker-compose直接返回指定服务容器的退出码:
- name: Complexity run: | docker-compose -f scripts/docker_lintage/docker-compose.yaml up --build --abort-on-container-exit --exit-code-from complexity
参数解释
--abort-on-container-exit:只要有服务容器退出,就停止所有其他容器--exit-code-from complexity:让docker-compose命令的退出码和complexity服务容器的退出码保持一致
另外从日志能看到,容器里缺少bc命令导致复杂度检查逻辑报错,这也是容器退出码为2的原因之一。需要在对应的Dockerfile里添加安装命令:
RUN apt-get update && apt-get install -y bc
修复后的Workflow片段
- name: Complexity run: | docker-compose -f scripts/docker_lintage/docker-compose.yaml up --build --abort-on-container-exit --exit-code-from complexity
这样配置后,当complexity容器退出码为2时,docker-compose会返回同样的退出码,GitHub Workflow就能正确识别这个步骤失败,进而标记整个任务为失败状态。
内容的提问来源于stack exchange,提问作者Oscar
相关产品推荐
相关产品推荐

