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

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

root4年前 (2022-03-04)docker1808

在制作 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://www.zhiqiu.top/?id=223

分享给朋友:

相关文章

docker-compose 命令

命令选项-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定;-p, --project-name NAME 指定项目名称,默认将使用...

docker-compose文件配置端口未生效,并报错

使用docker-compose搭建服务,映射2222:22端口的时候出现问题:Cannot create container for service test: invalid port specification:"13334...

docker-compose命令

docker-compose命令

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

流水线构建镜像,已安装却不见的依赖包 jemalloc

记录问题和处理过程已经解决的方式,非最佳解决方案前言:    在Dockerfile 中 已经执行apt-get install -y libjemalloc-dev ,但是在后续执行命令:...