docker - 为什么`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
)会导致使用额外的磁盘空间?
解决方案
这并不是chmod
导致额外的磁盘空间。Dockerfile 中的run
命令会创建一个层缓存,该缓存将耗尽您的磁盘空间。我建议聚合您使用运行的命令&&
。
推荐阅读
- swift - UIImagePickerController 内存泄漏问题,.camera 很好,但不适用于 .photoLibrary
- javascript - javascript中用于数字验证的匹配函数问题
- java - Java 拆分和替换未按预期工作,删除的不仅仅是正则表达式限制器
- javascript - Javascript - Flood-Fill 和 scanLine 算法是基于行的洪水,但我想要基于正方形的洪水
- ios - 获取上次更新信息 / Firebase
- react-native - 如何修复这个 react-native iOS 错误?
- tensorflow - 通过 import_meta_graph 加载元图时出现 ImageProjectiveTransformV2 错误
- java - 如何替换json文件中的值
- linux - 在不依赖 make 的 Linux 上构建系统
- css - 使用 ionic 4 应用 div 的背景颜色