You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件夹。

核心问题排查

  1. 构建步骤异常快速,实际未执行有效编译
    OpenCV编译通常需要几十分钟甚至更久,但你的cmake、make、make install步骤都在1秒内完成,这说明命令实际未正常执行——因为你把输出重定向到了日志文件,构建过程中不会显示错误,导致步骤标记为"DONE"但实际失败。

  2. 可能的具体原因

  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 23:45:31