DockerMock:通过模拟指令执行在构建前检测 Dockerfile 故障
软件工程
2021-04-13 v1
摘要
持续集成(CI)与持续部署(CD)在软件工程实践中被广泛采用。现实中,CI/CD 流水线的执行尚不能可靠地持续,因为它常被 Docker 构建失败所中断。然而,现有的试错式故障检测实践十分耗时。为了及时检测 Dockerfile 故障,我们提出了一种基于上下文的构建前分析方法,名为 DockerMock,通过模拟常见 Dockerfile 指令的执行来实现。当某条指令与近似并累积的运行上下文相冲突时,即判定为 Dockerfile 故障。通过显式跟踪上下文是否模糊,DockerMock 在检测精确率与召回率之间取得了良好平衡。我们使用来自 GitHub 上开源项目的 41 个 Dockerfile 中的 53 个故障,以及来自学生课程项目的 105 个 Dockerfile 中的 130 个故障对 DockerMock 进行了评估。平均而言,DockerMock 在这两个数据集中检测出了 68.0% 的 Dockerfile 故障。而基线 hadolint 检测出了 6.5%,基线 BuildKit 在未执行指令的情况下检测出了 60.5%。在 GitHub 数据集中,DockerMock 将构建次数减少至 47 次,优于 hadolint(73 次)和 BuildKit(74 次)。
引用
@article{arxiv.2104.05490,
title = {DockerMock: Pre-Build Detection of Dockerfile Faults through Mocking Instruction Execution},
author = {Mingjie Li and Xiaoying Bai and Minghua Ma and Dan Pei},
journal= {arXiv preprint arXiv:2104.05490},
year = {2021}
}