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所提到的, ADD
和COPY
会将你发送到构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 <...>