首页 > 解决方案 > 为什么`chmod`会导致`docker build`耗尽磁盘空间

问题描述

所以我的 Docker 构建基本上完成了,我只需要递归地chown和一个大目录。chmod

以下是来自 的部分输出docker build

Step 34/40 : RUN du -b -m -s / 2>/dev/null || true
 ---> Running in d261dfc7a9f8
1537    /
Removing intermediate container d261dfc7a9f8
 ---> 663d129f1487
Step 35/40 : RUN df --si -m /;df -i /;
 ---> Running in 8249096d3069
Filesystem     1M-blocks  Used Available Use% Mounted on
overlay            29674 28609      1066  97% /
Filesystem           Inodes  IUsed   IFree IUse% Mounted on
overlay             2737520 549839 2187681   21% /
Removing intermediate container 8249096d3069
 ---> fc4250e3433d
Step 36/40 : RUN chmod -R a+rwX /var/www/html
 ---> Running in 2705265de405
Error processing tar file(exit status 1): open /var/www/html/[...].php: no space left on device

我通过运行解决了我的问题docker system prune -a,以释放额外的 908 MB,但我不明白为什么磁盘空间首先是一个问题(更不用说tar与它有什么关系......)。

运行watch df -m /我可以清楚地看到这chmod导致了几个 100MB(向下向上)的大幅波动,但这没有任何意义,因为chmod不应更改磁盘分配,即使是 CoW(写入时复制)文件或稀疏文件也是如此。

为什么 chmod 的 dockers 实现(我正在使用FROM centos:7.4.1708)会导致使用额外的磁盘空间?

标签: dockerdiskspacedocker-build

解决方案


这并不是chmod导致额外的磁盘空间。Dockerfile 中的run命令会创建一个层缓存,该缓存将耗尽您的磁盘空间。我建议聚合您使用运行的命令&&


推荐阅读