当前位置:首页 > 容器 > docker > 正文内容

Dockerfile COPY 的诡异事件以及解决方案

root3年前 (2022-03-04)docker1203

在制作 docker 镜像时,有复制某一个路径下所有文件和文件夹到镜像的需求,写下了如下 dockerfile:


FROM alpine
COPY ./* /root/

原始目录结构是这样的:

/projects/test_docker_proj
├── Dockerfile
├── dir1
│   ├── dir11
│   │   └── file11
│   └── file1
└── file2

然而复制到 docker 镜像里的目录结构变成了这样:


/root/test_docker_proj
├── Dockerfile
├── dir11
│   └── file11
├── file1
└── file2


可以看到 dir1 这个文件夹并没有被复制到镜像里,但是 dir1 中的子文件夹和文件都被复制进来了,和 dir1 同级的文件也被复制了。也就是说,在 COPY 执行的过程中,第一层文件夹被「解包」了


docker 的 COPY/ADD 在复制文件夹时复制的是其内容

docker 的这种「奇怪」的逻辑已经被诟病许久了,但是似乎还没有要改变的意思


当一个项目中是托管到git上,Dockerfile 必然也是在项目中的

git clone 的时候 Dockerfile 跟项目在同一级,没办法方便的COPY项目文件到docker中

把Dockerfile 移动到上一层又佷不人性化。
绞尽脑汁的解决方案(也不是佷人性化)

FROM alpine
COPY $PWD /root/

这个时候要求docker build 的时候要在Dockerfile的当前路径下



扫描二维码推送至手机访问。

版权声明:本文由一叶知秋发布,如需转载请注明出处。

本文链接:https://zhiqiu.top/?id=223

分享给朋友:

相关文章

进入docker 的命令 以及强制修改docker时间

docker exec -it 1e33b26152e1 /bin/shordocker exec -it 1e33b26152e1 bashordocker exec -it 1e33b26152e1 sh修改docker时间,其实就是把...

限制docker日志大小

1、修改docker配置文件,vim /etc/docker/daemon.json{"log-driver":"json-file","log-opts": {"max...

docker-compose命令

docker-compose命令

执行 docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具体某个命令的使用格式。如下docker-compose...

docker 容器中文乱码

由于选用的镜像没有中文语言包正常情况下需要将服务的语言 LANG设置为中文的由于各种原因你的镜像没有zh_CN.UTF-8这个语言包设置ENV LANG zh_CN.UTF-8发现无法生效以为大部分服务器是没有zh_CN.UTF-8包的需要...

docker-compose 命令安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname ...