开发者社区 问答 正文

疑似 docker 17.06.2-ce bug 撑爆 inode 导致服务更新报错

这两天发现使用发布老是报错: 
Failed to load registry-vpc.cn-hangzhou.aliyuncs.com/yhsd/app-yhsd-cross-border:0.3.4: failed to register layer: Error processing tar file(exit status 1): open /usr/src/app/node_modules/_core-js@2.5.7@core-js/fn/array/of.js: no space left on device

然后查看硬盘容量:

inode:
显然inode爆了;

然而我只有6个服务:

参考https://stackoverflow.com/questions/47531597/docker-is-full-all-inodes-are-used,估计是同一问题.

展开
收起
247866712385558012 2018-10-15 23:53:34 1341 分享 版权
阿里云 AI 助理回答

遇到这个问题,说明你的系统磁盘的inode(索引节点)已经用尽。Inode是Linux文件系统中用于存储元数据(如文件的权限、大小、时间戳等信息)的数据结构,每个文件或目录都会占用至少一个inode。即使你还有足够的磁盘空间,inode耗尽也会导致无法创建新的文件或目录。

针对Docker容器使用中inode耗尽的问题,你可以尝试以下几个解决方案:

  1. 清理无用镜像和容器: 使用以下命令清理不再使用的Docker镜像和容器,这可以释放一些inode。

    docker system prune -a
    

    注意:这个命令会删除所有未被打标签的镜像、停止的容器、网络和构建缓存,请确保没有重要数据在这些对象中。

  2. 检查并清理大体积的镜像: 有些Docker镜像可能包含了大量小文件,这会消耗很多inode。识别并考虑替换这些镜像,或者优化它们以减少文件数量。

  3. 调整Docker存储驱动: 虽然不直接解决inode问题,但某些Docker存储驱动(如overlay2相比aufs)可能更高效地管理inode。如果你当前不是使用overlay2,且系统支持,可以考虑切换。

  4. 增加inode数量: 如果可能的话,重新格式化文件系统时可以增加inode的数量。但这通常需要备份数据、重新格式化分区、再恢复数据,操作风险较大,需谨慎考虑。

  5. 检查并清理应用内部的临时文件和日志: 进入到容器内部,检查是否有应用程序生成了大量的临时文件或日志文件,定期清理这些文件可以避免inode耗尽。

  6. 优化Dockerfile: 在构建镜像时,尽量避免将包含大量小文件的目录整个COPY进镜像,可以考虑合并或压缩文件来减少inode的使用。

  7. 监控和限制: 对于长期运行的服务,建立inode使用情况的监控机制,并考虑为容器设置资源限制,比如使用--storage-opt size=来限制容器能使用的inode数量,虽然这不是直接解决问题的方法,但可以帮助提前预警和管理资源。

请根据实际情况选择合适的解决方案,并在执行任何可能导致数据丢失的操作前做好数据备份。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答