docker build: COPY/ADD报错:not a directory
注:本文基于CentOS 6.5 3.10内核,docker版本1.7.1背景制作docker镜像时,要把一个文件拷贝至镜像中,可以使用ADD或者COPY命令,但是使用的时候一直报错。[root@localhost test]# docker build .Sending build context to Docker daemon 3.072 kBSending build conte...
·
注:本文基于CentOS 6.5 3.10内核,docker版本1.7.1
背景
制作docker镜像时,要把一个文件拷贝至镜像中,可以使用ADD或者COPY命令,但是使用的时候一直报错。
[root@localhost test]# docker build .
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM gpmidi/centos-6.5
---> d7943348aefb
Step 1 : ADD a /root
stat /var/lib/docker/devicemapper/mnt/45f35175c0848980b14929ead6ba6bc3b85b4836c5f0861cd25c9fad7c27e4eb/rootfs/root/a: not a directory
最简单的操作,把当前目录的a文件拷贝至镜像环境中的/root目录,然而就是不成功。
换成COPY也一样报错。
[root@localhost test]# docker build .
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM gpmidi/centos-6.5
---> d7943348aefb
Step 1 : COPY a /root
stat /var/lib/docker/devicemapper/mnt/31d0d0527b091d952147cfb63b8700ef6865b88ae768862e4aa16518f5541101/rootfs/root/a: not a directory
解决方案
在网上找了很久,一度还以为是bug,然而并不是,而是没搞清楚ADD/COPY的用法。在拷贝文件的时候docker是用“/”来区分目录和文件的,也就是“/root”是被当做根目录文件root,“/root/”才被识别为目录。知道这个点后,修改就简单了,在目录最后以斜杆“/”结尾即可。
[root@localhost test]# docker build .
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM gpmidi/centos-6.5
---> d7943348aefb
Step 1 : COPY a /root/
---> f6477c17485c
Removing intermediate container 0d5ca33a3bda
Successfully built f6477c17485c
注意事项
在查阅资料时还看到一些其他注意事项,一并记录。
1、拷贝或者添加文件时不能超出当前目录范围,即不能使用以下方式:
ADD ../data/file /home/
COPY /home/a.zip /home/
因为在docker build最开始就将当前上下文环境传给 docker deamon,因此如果使用其他目录,docker deamon无法找到这些文件,这也就是我们使用docker build . ,这个“.”的用意。
2、COPY命令拷贝是原样拷贝,而ADD命令会将压缩包解压。
更多推荐
已为社区贡献4条内容
所有评论(0)