将内置的OpenCV从一个Docker映像复制到另一个

时间:2018-11-16 02:03:28

标签: docker opencv dockerfile

使用this Dockerfile并突出显示一些重要的部分以简化操作:

RUN cd /opencv-$OPENCV_VERSION/cmake_binary \
    && cmake -DBUILD_TIFF=ON \
    && make install

## Compress the openCV files so you can extract them from the docker easily 
RUN tar cvzf opencv-$OPENCV_VERSION.tar.gz --directory=$OPENCV_INSTALL_PATH .

现在,我想在一个新容器中构建我的应用程序,据我所知我可以去:

FROM docker-opencv-cuda:cv3.3.1_cuda8 AS opencv

COPY -from=opencv /opencv/ /opencv/

但是,我得到一个错误:

  

从标志值opencv无效:对opencv的拉取访问被拒绝,存储库不存在或可能需要'docker login'

环顾四周,似乎COPY -from试图引用私有或公共存储库,但是我希望它在docker image ls报告中寻找我的本地版本:

REPOSITORY           TAG             IMAGE ID
docker-opencv-cuda   cv3.3.1_cuda8   xxxx
docker-opencv-cuda   cv3.3.1_cuda9   yyyy

我该怎么做?添加到存储库不是有效的选择,因为稍后我将拥有无法共享的专有代码,等等。

更新:我可能发现了一个错误?我有Docker 18.09.0,并给出了以下代码:

ARG CV_VERSION=cv3.3.1_cuda8
FROM docker-opencv-cuda:$CV_VERSION AS opencv

COPY -from=opencv /opencv/ /opencv/
COPY -from=docker-opencv-cuda:$CV_VERSION /opencv/ /opencv/
COPY -from=docker-opencv-cuda:cv3.3.1_cuda8 /opencv/ /opencv/

只有带有完整COPY标签的第三个-from有效。

更新2 :Docker新手问题。我的Dockerfile不正确,因为-from不应引用当前的FROM,所以可以,可以满足我的要求。

ARG CV_VERSION=cv3.3.1_cuda8
FROM docker-opencv-cuda:$CV_VERSION AS opencv

# Switch context so the OpenCV files no longer exist in the current image
FROM another_package

COPY -from=opencv /opencv/ /opencv/
COPY -from=docker-opencv-cuda:$CV_VERSION /opencv/ /opencv/
COPY -from=docker-opencv-cuda:cv3.3.1_cuda8 /opencv/ /opencv/

1 个答案:

答案 0 :(得分:1)

启动docker时首先映射本地磁盘,然后将数据从docker复制到本地磁盘。

例如:

$ docker run --it -rm -v /your_path:/your_path  your_image
# cp -rf /opencv /your_path 
# exit 

然后创建您的新docker,并从本地复制数据。