Docker不添加现有的文件

我有一个简单的设置,克隆Git回购和编译一个二进制文件,然后将其复制到容器

Dockerfile:

FROM ubuntu:16.04 RUN apt-get update && apt-get install -y <...> RUN git clone <REPO> WORKDIR <REPO>/build RUN cmake .. RUN make install RUN ls bin ADD bin/binaryname / ENTRYPOINT <...> 

Docker输出:

 [100%] Linking CXX executable bin/binaryname ... ---> 4a9c6bb40214 Removing intermediate container 00bf96c84f37 Step 7 : RUN ls bin ---> Running in c295c1fca462 binaryname ---> a418c1bfa6cd Removing intermediate container c295c1fca462 Step 8 : ADD bin/binaryname / lstat bin/binaryname: no such file or directory 

所以基本上docker看到的文件,但不会添加它,为什么?

删除ADD指令,它应该工作。 原因如下:

所有的RUN指令都发生在正在构build的映像中,而不是在本地机器上。 ADD指令尝试将文件从主机文件系统复制到映像。 由于您在映像中构build了文件bin/binaryname ,因此您的主机上不存在bin / binaryname。 它已经在图像中,因为这是它的build立。

如果您需要文件系统根目录下的二进制文件,而不是<REPO>/build/bin目录下的二进制文件,请将其作为RUN命令进行复制。 正如Mano所提到的, ADDCOPY会将你发送到构build主机的上下文(通常是docker build .命令末尾的.目录)复制内容。 但是你要做的是从容器内的一个目录复制到另一个目录。 这看起来像:

 FROM ubuntu:16.04 RUN apt-get update && apt-get install -y <...> RUN git clone <REPO> WORKDIR <REPO>/build RUN cmake .. RUN make install \ && cp bin/binaryname / ENTRYPOINT <...>