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

基于Ubuntu的Python3+OpenCV Dockerfile编译cmake报错求助

问题原因及解决方案

错误原因

Docker中每个RUN指令都是独立运行的Shell进程,进程间的工作目录不会继承。你写的:

RUN mkdir /opencv/build && \
    cd /opencv/build
RUN cmake ..

第一个RUN里的cd /opencv/build只在当前进程生效,执行完这个RUN后,工作目录又回到了根目录/。这时执行cmake ..,会去寻找根目录的上级目录的CMakeLists.txt,自然找不到,就触发了报错。

修正后的Dockerfile

把编译相关的命令合并到同一个RUN指令里,确保目录切换和后续命令在同一个Shell进程中执行:

FROM ubuntu

# 安装依赖
RUN apt-get update &&\
    apt-get install -y cmake gcc g++ python3-dev python3-numpy \
    libavcodec-dev libavformat-dev libswscale-dev \
    libgtk2.0-dev libgtk-3-dev \
    libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev git

# 克隆OpenCV仓库
RUN git clone https://github.com/opencv/opencv.git

# 编译安装OpenCV
RUN mkdir /opencv/build && cd /opencv/build && \
    cmake .. && \
    make && \
    make install

另外也可以用WORKDIR指令指定后续命令的工作目录,写法如下:

FROM ubuntu

# 安装依赖
RUN apt-get update &&\
    apt-get install -y cmake gcc g++ python3-dev python3-numpy \
    libavcodec-dev libavformat-dev libswscale-dev \
    libgtk2.0-dev libgtk-3-dev \
    libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev git

# 克隆OpenCV仓库
RUN git clone https://github.com/opencv/opencv.git

# 指定工作目录为/opencv/build
WORKDIR /opencv/build

# 编译安装
RUN cmake .. && \
    make && \
    make install

这样修改后,cmake ..会正确指向/opencv目录下的CMakeLists.txt,就能正常编译了。

内容的提问来源于stack exchange,提问作者Paloma Jimeno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:15:16