0

0

Docker 容器无法启动,日志显示 "no space left on device" 如何解决?

畫卷琴夢

畫卷琴夢

发布时间:2025-06-23 12:19:01

|

705人浏览过

|

来源于php中文网

原创

docker 容器启动失败提示 "no space left on device" 的解决方法如下:1. 使用 df -h 检查磁盘空间;2. 删除无用镜像 docker rmi 或清理 dangling 镜像 docker images -q -f dangling=true | xargs docker rmi;3. 删除已停止容器 docker rm $(docker ps -aq);4. 清理容器日志,设置日志大小限制;5. 删除未使用 volume docker volume prune;6. 清理构建缓存 docker builder prune;7. 考虑切换存储驱动如 overlay2;8. 必要时扩大磁盘容量。为避免问题,应定期清理资源、使用 .dockerignore 和多阶段构建优化镜像,并合理管理容器日志。

Docker 容器无法启动,日志显示 \

Docker 容器启动失败,提示 "no space left on device",通常意味着你的 Docker 宿主机磁盘空间不足,或者 Docker 镜像、容器占用了过多空间。需要清理磁盘空间或调整 Docker 的存储配置。

解决方案

  1. 检查磁盘空间使用情况: 首先,使用 df -h 命令查看宿主机磁盘空间使用情况,确认哪个分区(通常是 //var/lib/docker)空间不足。

  2. 清理 Docker 镜像:

    • 删除不再使用的镜像: 使用 docker images 查看所有镜像,然后使用 docker rmi 删除不再需要的镜像。可以一次性删除多个镜像:docker rmi ...
    • 清理 dangling 镜像: 这些是无标签的镜像,通常是构建过程中产生的中间层。使用 docker images -f dangling=true 查找,然后使用 docker rmi $(docker images -q -f dangling=true) 删除。
  3. 清理 Docker 容器:

    • 删除已停止的容器: 使用 docker ps -a 查看所有容器,然后使用 docker rm 删除已停止的容器。可以使用 docker rm $(docker ps -aq) 删除所有已停止的容器,但请谨慎操作,确保你不需要这些容器中的数据。
    • 清理容器日志: 容器日志可能会占用大量磁盘空间。你可以通过设置 Docker 的日志驱动来限制日志大小,或者手动删除日志文件。对于已经运行的容器,可能需要进入容器内部删除日志文件。
  4. 清理 Docker volume:

    • 删除未使用的 volume: 使用 docker volume ls 查看所有 volume,然后使用 docker volume rm 删除未使用的 volume。可以使用 docker volume prune 删除所有未被任何容器使用的 volume,同样需要谨慎操作。
  5. 清理 Docker 构建缓存:

    • Docker 构建过程中会产生缓存,这些缓存也可能占用大量磁盘空间。使用 docker builder prune 命令清理构建缓存。
  6. 调整 Docker 存储驱动: 如果你的存储驱动是 devicemapper,并且配置不当,可能会导致空间不足。可以考虑切换到其他存储驱动,如 overlay2。切换存储驱动需要重新初始化 Docker,会丢失所有镜像和容器,请务必备份数据。

    快剪辑
    快剪辑

    国内⼀体化视频⽣产平台

    下载
  7. 扩大磁盘空间: 如果以上方法都无法解决问题,或者你不想频繁清理 Docker 空间,可以考虑扩大磁盘空间。这通常涉及到增加虚拟机磁盘大小或挂载新的磁盘分区。

如何避免 Docker 磁盘空间不足?

  • 定期清理: 养成定期清理 Docker 镜像、容器和 volume 的习惯。可以编写脚本自动化清理过程。
  • 使用 .dockerignore: 在 Dockerfile 中使用 .dockerignore 文件排除不必要的文件,减少镜像大小。
  • 多阶段构建: 使用多阶段构建,只将最终运行所需的文件复制到最终镜像中,减小镜像体积。
  • 限制日志大小: 配置 Docker 的日志驱动,限制容器日志大小。
  • 监控磁盘空间: 使用监控工具监控 Docker 宿主机的磁盘空间使用情况,及时发现并处理空间不足的问题。

Docker 镜像层过多导致空间占用过大怎么办?

Docker 镜像是由多个只读层组成的。每次执行 docker build 命令,都会在现有镜像层的基础上创建一个新的层。如果 Dockerfile 中包含大量的 RUN 指令,或者频繁修改文件,会导致镜像层过多,占用大量磁盘空间。

解决方案:

  • 合并 RUN 指令: 将多个 RUN 指令合并成一个,减少镜像层数。例如,将多个软件包安装命令合并成一个 RUN apt-get update && apt-get install -y package1 package2 package3
  • 使用多阶段构建: 使用多阶段构建,可以将构建过程中的中间层丢弃,只保留最终运行所需的文件。
  • 优化 Dockerfile: 避免在 Dockerfile 中执行不必要的操作,例如,不要安装调试工具,除非确实需要。

Docker 容器日志管理最佳实践

容器日志对于故障排查和性能分析至关重要。但是,如果不加以管理,容器日志可能会占用大量磁盘空间,导致 "no space left on device" 错误。

最佳实践:

  • 选择合适的日志驱动: Docker 提供了多种日志驱动,例如 json-filesyslogfluentd 等。选择适合你的需求的日志驱动。json-file 是默认的日志驱动,会将容器日志以 JSON 格式写入文件。syslog 可以将容器日志发送到 syslog 服务器。fluentd 可以将容器日志发送到 Fluentd 收集器。
  • 限制日志大小: 对于 json-file 日志驱动,可以使用 max-sizemax-file 选项限制日志文件的大小和数量。例如,--log-opt max-size=10m --log-opt max-file=3 表示每个日志文件最大为 10MB,最多保留 3 个日志文件。
  • 使用日志聚合工具: 使用日志聚合工具,例如 ELK Stack (Elasticsearch, Logstash, Kibana) 或 Splunk,集中管理和分析容器日志。
  • 避免将敏感信息写入日志: 避免将密码、密钥等敏感信息写入日志。
  • 定期备份和清理日志: 定期备份容器日志,并清理不再需要的日志文件。

通过合理的 Docker 镜像构建、容器管理和日志管理,可以有效避免 Docker 磁盘空间不足的问题,确保 Docker 容器稳定运行。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

249

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

494

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

398

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

436

2024.04.08

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

3

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 1.9万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 17.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号