我的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
导致几百MB的大幅波动(上升和下降),但这毫无意义,因为 chmod
不应该改变磁盘分配,即使是 CoW(写时复制)文件或稀疏文件。为什么 dockers 实现的 chmod (我使用的是
FROM centos:7.4.1708
)会导致额外的磁盘空间被使用?
COPY
和&& chmod
结合使用。相反,你可以使用 copy --chown。 - Roman Zagday