基于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
相关产品推荐
相关产品推荐

