Dockerfile中mkdir执行后build文件夹不显示的问题排查
问题分析与解决
问题背景
Dockerfile内容:
FROM ubuntu:20.04 AS setup_env # ... FROM setup_env AS clone_build_public_repos # ... WORKDIR /my_prod/opencv RUN mkdir -p ./build WORKDIR /my_prod/opencv/build RUN cmake -D CMAKE_BUILD_TYPE=RELEASE &> cmake.log RUN make -j4 &> make.log RUN make install &> make-install.log # ... FROM clone_build_public_repos ENTRYPOINT ["tail", "-f", "/dev/null"]
执行的构建命令:
docker build . --progress plain -t my_company:my_prod &> docker-build.log
构建日志显示相关步骤快速完成:
#28 [clone_build_public_repos 17/37] WORKDIR /my_prod/opencv #28 CACHED #29 [clone_build_public_repos 18/37] RUN mkdir -p ./build #29 DONE 0.3s #30 [clone_build_public_repos 19/37] WORKDIR /my_prod/opencv/build #30 DONE 0.0s #31 [clone_build_public_repos 20/37] RUN cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") -D PYTHON3_EXECUTABLE=$(which python3) -D PYTHON_DEFAULT_EXECUTABLE=$(which python3) -D WITH_GTK=ON -D WITH_FFMPEG=ON -D BUILD_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D INSTALL_PYTHON_EXAMPLES=ON -D HAVE_opencv_python3=ON .. &> cmake.log #31 DONE 0.4s #32 [clone_build_public_repos 21/37] RUN make -j4 &> make.log #32 DONE 0.3s #33 [clone_build_public_repos 22/37] RUN make install &> make-install.log #33 DONE 0.4s
但在VSCode容器浏览器中找不到/my_prod/opencv/build文件夹。
核心问题排查
构建步骤异常快速,实际未执行有效编译
OpenCV编译通常需要几十分钟甚至更久,但你的cmake、make、make install步骤都在1秒内完成,这说明命令实际未正常执行——因为你把输出重定向到了日志文件,构建过程中不会显示错误,导致步骤标记为"DONE"但实际失败。可能的具体原因
- cmake路径错误:cmake命令中的
../../opencv_contrib/modules路径不存在。当前WORKDIR是/my_prod/opencv/build,../../指向/my_prod目录,如果该目录下没有opencv_contrib,cmake会配置失败,不会生成Makefile,后续make自然无内容可编译。 - 后续步骤修改/删除build目录:在
clone_build_public_repos阶段的#23到#37步骤中,可能存在RUN rm -rf /my_prod/opencv/build或COPY/ADD命令覆盖/my_prod/opencv目录的操作。 - VSCode容器浏览器显示问题:可能build目录存在但为空,VSCode默认不显示空目录(可在设置中开启显示空目录)。
解决步骤
- 进入容器手动验证:执行以下命令进入容器,直接查看目录结构:
docker run -it --rm my_company:my_prod bash # 进入后执行 ls -la /my_prod/opencv/ - 查看构建日志文件:在容器内查看cmake、make的实际输出,定位错误:
cat /my_prod/opencv/build/cmake.log cat /my_prod/opencv/build/make.log - 检查后续构建步骤:查看Dockerfile中
clone_build_public_repos阶段的后续代码,确认是否有修改/my_prod/opencv/build目录的操作。 - 修正cmake路径:确保
OPENCV_EXTRA_MODULES_PATH指向正确的路径,比如如果opencv_contrib和opencv在同一级目录下,路径应为../opencv_contrib/modules(因为当前WORKDIR是build,上级是opencv,所以../opencv_contrib才是同级目录)。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

