将构建的OpenCV从一个Docker映像复制到另一个映像

将构建的OpenCV从一个Docker映像复制到另一个映像,docker,opencv,dockerfile,Docker,Opencv,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.

仅与突出显示的重要部分配合使用,以简化操作:

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登录”

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

我怎样才能做我想做的事?添加到存储库不是一个有效的选项,因为以后我将拥有无法共享的专有代码,等等

更新:我可能发现了一个bug?我有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/
只有第三份带有“完整自”标签的副本才有效

更新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/

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

例如:

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

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

我考虑将其作为一种解决方法,我可能会采用这种方法,因为正如我在“更新副本-发件人”中指出的那样,它看起来很不可靠。
$ docker run --it -rm -v /your_path:/your_path  your_image
# cp -rf /opencv /your_path 
# exit