gpt4 book ai didi

docker - 为什么 `chmod`导致 `docker build`磁盘空间不足

转载 作者:行者123 更新时间:2023-12-02 19:23:37 26 4
gpt4 key购买 nike

因此我的Docker构建已基本完成,我只需要递归chownchmod一个大目录。

以下是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导致几百MBs的大摆动(上下),但这没有任何意义,因为 chmod不应更改磁盘分配,即使使用CoW(写入时复制)文件或稀疏也不行文件。

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

最佳答案

docker 中的文件系统层是通过写时复制解决方案实现的。对文件的任何更改都会首先生成该文件的副本,然后将更改应用于该文件副本,甚至是权限,所有者或时间戳。 chown和chmod命令以递归方式运行时,即使未更改任何权限,也将更改文件的时间戳。

因此,为了最大程度地减小docker中的层大小,请对同一层中的文件进行所有更改。每个步骤都会创建一个新层,因此将更改合并到同一步骤中。使用COPY命令,修复源上的权限,并查看用于调整所有权的选项。借助RUN,您通常会看到与&&语法链接在一起的命令,这些命令可以压缩为一个步骤。这在创建临时文件时尤其重要,因为您需要在完成步骤之前将其删除,以避免将它们写入图像层。

关于docker - 为什么 `chmod`导致 `docker build`磁盘空间不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58018658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com