使用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/
答案 0 :(得分:1)
启动docker时首先映射本地磁盘,然后将数据从docker复制到本地磁盘。
例如:
$ docker run --it -rm -v /your_path:/your_path your_image
# cp -rf /opencv /your_path
# exit
然后创建您的新docker,并从本地复制数据。