我正在使用:
Docker 18.09.1
Ubuntu 16.04
我想使用Dockerfile
将文件从docker镜像的特定文件夹复制到docker镜像的另一个文件夹。
我的docker
命令是:
sudo docker build -t mytest .
sudo docker run mytest
我的Dockerfile
是:
FROM ubuntu:16.04
RUN mkdir -p out/
COPY . out/ <---- this works
COPY /usr/bin/yes /opt <---- this doesn't work!!
CMD out/helloworld
我的C++
工作文件夹中有一个名为helloworld
的{{1}}应用程序。但是,我想将out/
下的名为"yes"
的文件复制到我的/user/bin/
文件夹中。
我尝试了/opt
命令和COPY
命令,但是都没有成功。
我试图通过在CMD
VM上运行命令来检查文件是否存在:
Ubuntu
我的COPY尝试:
docker run mytest ls -l /opt
total 0
我的CMD尝试:
COPY /usr/bin/yes /opt
错误:
CMD ["cp /usr/bin/yes /opt"]
两者都不起作用。如何将文件复制到另一个文件夹(在同一docker映像内)?
答案 0 :(得分:1)
此处说明您不能使用绝对路径将文件从主机复制到容器。不支持:https://github.com/moby/moby/issues/4592。因此,您必须首先准备当前目录中的所有文件。
答案 1 :(得分:0)
COPY
命令将文件从构建上下文(在您的示例中,即示例中的.
命令的末尾,即docker build
复制到映像中)中。您不能将文件从构建上下文外部复制到映像中。
出于您的目的,您似乎想要在映像中的两个不同位置之间进行复制,而不是完全从构建上下文中进行复制。为此,只要几乎每个基本映像中都存在cp
命令,就可以运行:
RUN cp /usr/bin/yes /opt/
或使用json / exec语法:
RUN [ "cp", "/usr/bin/yes", "/opt/" ]
请注意,exec语法要求您将命令的每个参数都分隔到单独的json数组条目中。 exec语法也不会在shell上运行,因此您无法执行诸如变量扩展和I / O重定向之类的操作,在这种情况下不会这样做。