arXiv · 2104.05490
DockerMock: Pre-Build Detection of Dockerfile Faults through Mocking Instruction Execution
Abstract
Continuous Integration (CI) and Continuous Deployment (CD) are widely adopted in software engineering practice. In reality, the CI/CD pipeline execution is not yet reliably continuous because it is often interrupted by Docker build failures. However, the existing trial-and-error practice to detect faults is time-consuming. To timely detect Dockerfile faults, we propose a context-based pre-build analysis approach, named DockerMock, through mocking the execution of common Dockerfile instructions. A Dockerfile fault is declared when an instruction conflicts with the approximated and accumulated running context. By explicitly keeping track of whether the context is fuzzy, DockerMock strikes a good balance of detection precision and recall. We evaluated DockerMock with 53 faults in 41 Dockerfiles from open source projects on GitHub and 130 faults in 105 Dockerfiles from student course projects. On average, DockerMock detected 68.0% Dockerfile faults in these two datasets. While baseline hadolint detected 6.5%, and baseline BuildKit detected 60.5% without instruction execution. In the GitHub dataset, DockerMock reduces the number of builds to 47, outperforming that of hadolint (73) and BuildKit (74).
Explore related subjects
Keep this discovery
Mingjie Li, Xiaoying Bai, Minghua Ma, Dan Pei. 2021-04-12. DockerMock: Pre-Build Detection of Dockerfile Faults through Mocking Instruction Execution. https://arxiv.org/abs/2104.05490
Cite the original work for its findings. Save a collection to share your selection of sources.