GitLab CI构建失败后,如何进入Docker查看作业相关文件?
场景
- 向自托管GitLab服务器上的仓库推送代码
- 触发Runner运行CI作业
- CI作业执行失败
- 需要排查失败原因
问题
如何进入Docker(容器?镜像?卷?),查看CI作业失败时可用的文件?例如作业提示“查看foo.log获取详情”,拥有Runner服务器的直接SSH权限,但不知道该去哪里查找或如何进入Docker来检查foo.log。
解决方法
方法一:临时修改CI配置,让失败作业停留在交互状态
在项目的.gitlab-ci.yml中,给目标作业添加失败后进入bash的逻辑,这样作业失败时会保持容器运行,直接在容器内排查:
your_failed_job: script: - 原有的作业执行命令 || bash # 命令执行失败后进入bash交互
提交修改后重新触发作业,失败时终端会停在容器的bash环境,直接查看foo.log即可。
方法二:查找并进入Runner遗留的容器/卷
- 查找作业容器:SSH到Runner服务器,列出所有容器(包括已停止的):
docker ps -a
找到名称或标签包含gitlab-runner、项目ID或作业ID的容器。
- 进入存活/停止的容器:
如果容器还在运行或未被清理,启动并进入:
docker start <容器ID/名称> docker exec -it <容器ID/名称> bash
进入后直接导航到foo.log所在路径查看内容。
- 挂载临时卷查看文件:如果容器已被销毁,检查Runner创建的临时卷:
docker volume ls
找到名称以runner-开头的卷,用临时容器挂载该卷:
docker run -it --rm -v <卷名称>:/workspace ubuntu bash
在/workspace目录下即可找到作业生成的foo.log等文件。
方法三:修改Runner配置,默认保留失败作业容器
编辑Runner的配置文件(通常路径为/etc/gitlab-runner/config.toml),找到对应Runner的配置段,添加保留失败容器的配置:
[runners.docker] # 其他原有配置... preserve_container_on_failure = true
重启GitLab Runner服务:
sudo gitlab-runner restart
之后所有失败的作业容器都会被保留,直接用docker ps -a定位后进入排查即可。
内容的提问来源于stack exchange,提问作者nullromo
相关产品推荐
相关产品推荐

