Docker容器磁盘占满的一些情况汇总

 更新时间:2019年07月10日 09:49:53   作者:isea533  
这篇文章主要给大家介绍了关于Docker容器磁盘占满的一些情况,文中通过示例代码介绍的非常详细,对大家学习或者使用Docker具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

本文是我自己最近遇到的两种情况,后续有新发现再补充。

参考文档:https://docs.docker.com/engine/reference/commandline/dockerd/

应用日志过多

默认情况下,每个 Docker 容器都有 10G 的存储空间,当超出该大小时,容器就会出现问题。

可以参考官方文档 dm.basesize 参数的说明来修改默认的容器大小:

指定创建基本设备时要使用的大小,这会限制图像和容器的大小。默认值为10G。请注意,精简设备本质上是“稀疏的”,因此大多数空的10G设备不会在池上使用10 GB的空间。但是,文件系统将为空盒使用更多空间,设备越大。

可以在守护进程重启时增加基本设备大小,这将允许所有未来的图像和容器(基于这些新图像)具有新的基本设备大小。

例子

$ sudo dockerd --storage-opt dm.basesize=50G

这将使基本设备大小增加到50G。如果现有基本设备大小大于50G,Docker守护程序将抛出错误。用户可以使用此选项扩展基本设备大小,但不允许缩小。

此值会影响系统范围的“基本”空文件系统,该文件系统可能已被拉出的图像初始化和继承。通常,更改此值需要执行其他步骤:

$ sudo service docker stop

$ sudo rm -rf /var/lib/docker

$ sudo service docker start

我在这里遇到的问题是因为某个模块会在 10 分钟内输出 1G 的日志,修改日志策略后可以解决该问题。

Dockerd 日志过多

有一个 GitLab 的 docker 服务,运行几个月后就会出现无法 push 和 pull 的情况,原因都是因为 /var/lib/docker 磁盘空间已满导致的。而导致磁盘空间占满的原因是因为 dockerd 的日志占用了十几G的空间导致的。

日志文件的路径形如: /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log

参考:https://stackoverflow.com/questions/31829587/docker-container-logs-taking-all-my-disk-space

可以参考如下几种解决方案:

1. 启动容器参数

参考:https://docs.docker.com/engine/reference/commandline/run/

使用 --log-opt Log driver options 配置日志策略。

例如: --log-opt max-size=50m。

2. 全局默认配置

在 daemon.json 中配置,linux 中默认位置为 /etc/docker。

配置示例:

{
 "log-driver": "json-file",
 "log-opts": {
  "max-size": "10m",
  "max-file": "3",
  "labels": "production_status",
  "env": "os,customer"
 }
}

日志配置参考:https://docs.docker.com/config/containers/logging/configure/

完整 daemon.json 示例参考:https://docs.docker.com/engine/reference/commandline/dockerd/

{
 "authorization-plugins": [],
 "data-root": "",
 "dns": [],
 "dns-opts": [],
 "dns-search": [],
 "exec-opts": [],
 "exec-root": "",
 "experimental": false,
 "features": {},
 "storage-driver": "",
 "storage-opts": [],
 "labels": [],
 "live-restore": true,
 "log-driver": "json-file",
 "log-opts": {
 "max-size": "10m",
 "max-file":"5",
 "labels": "somelabel",
 "env": "os,customer"
 },
 "mtu": 0,
 "pidfile": "",
 "cluster-store": "",
 "cluster-store-opts": {},
 "cluster-advertise": "",
 "max-concurrent-downloads": 3,
 "max-concurrent-uploads": 5,
 "default-shm-size": "64M",
 "shutdown-timeout": 15,
 "debug": true,
 "hosts": [],
 "log-level": "",
 "tls": true,
 "tlsverify": true,
 "tlscacert": "",
 "tlscert": "",
 "tlskey": "",
 "swarm-default-advertise-addr": "",
 "api-cors-header": "",
 "selinux-enabled": false,
 "userns-remap": "",
 "group": "",
 "cgroup-parent": "",
 "default-ulimits": {
 "nofile": {
  "Name": "nofile",
  "Hard": 64000,
  "Soft": 64000
 }
 },
 "init": false,
 "init-path": "/usr/libexec/docker-init",
 "ipv6": false,
 "iptables": false,
 "ip-forward": false,
 "ip-masq": false,
 "userland-proxy": false,
 "userland-proxy-path": "/usr/libexec/docker-proxy",
 "ip": "0.0.0.0",
 "bridge": "",
 "bip": "",
 "fixed-cidr": "",
 "fixed-cidr-v6": "",
 "default-gateway": "",
 "default-gateway-v6": "",
 "icc": false,
 "raw-logs": false,
 "allow-nondistributable-artifacts": [],
 "registry-mirrors": [],
 "seccomp-profile": "",
 "insecure-registries": [],
 "no-new-privileges": false,
 "default-runtime": "runc",
 "oom-score-adjust": -500,
 "node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],
 "runtimes": {
 "cc-runtime": {
  "path": "/usr/bin/cc-runtime"
 },
 "custom": {
  "path": "/usr/local/bin/my-runc-replacement",
  "runtimeArgs": [
  "--debug"
  ]
 }
 },
 "default-address-pools":[{"base":"172.80.0.0/16","size":24},
 {"base":"172.90.0.0/16","size":24}]
}

配置参数后需要重启 docker 服务。

docker-compose 配置

参考:https://docs.docker.com/compose/compose-file/compose-file-v2/

配置示例:

logging:
 options:
  max-size: '12m'
  max-file: '5'
 driver: json-file

补充

写的比较急,贴的链接中都有非常完整的信息,应该都能解决此类问题。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • Docker使用数据容器的具体示例

    Docker使用数据容器的具体示例

    本文主要介绍了Docker使用数据容器的具体示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • docker(alpine+golang) 中 hosts 不生效问题解决方法

    docker(alpine+golang) 中 hosts 不生效问题解决方法

    这篇文章主要介绍了docker(alpine+golang) 中 hosts 不生效问题解决大全,本文给大家分享了三种解决方法,每种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Docker overlay 网络搭建的方法

    Docker overlay 网络搭建的方法

    Overlay网络是指通过在现有网络上叠加一个软件定义的逻辑网络,这篇文章主要介绍了Docker overlay 网络搭建的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Docker安装wordpress并配置数据库超详细介绍版

    Docker安装wordpress并配置数据库超详细介绍版

    安装WordPress是一项常见的任务,使用Docker可以使这个过程更加简单和可靠,下面这篇文章主要给大家介绍了关于Docker安装wordpress并配置数据库的相关资料,需要的朋友可以参考下
    2023-11-11
  • Docker镜像分层的原理详解

    Docker镜像分层的原理详解

    这篇文章主要介绍了Docker镜像分层的原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Docker容器监控及日志管理实现过程解析

    Docker容器监控及日志管理实现过程解析

    这篇文章主要介绍了Docker容器监控及日志管理实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • docker拉取镜像查看版本的方法步骤

    docker拉取镜像查看版本的方法步骤

    这篇文章主要介绍了docker拉取镜像查看版本的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Centos 7中Docker私有仓库的搭建方法

    Centos 7中Docker私有仓库的搭建方法

    本篇文章主要介绍了Centos 7中Docker私有仓库的搭建方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Docker基础学习之数据管理

    Docker基础学习之数据管理

    我们在使用Docker 的时候,会产生很多数据,比如web服务器啊,数据库之类的,有时我们还需要备份或复制这些数据,这就需要涉及到Docker的数据管理了。这篇文章就给大家详细的介绍Docker的数据管理,感兴趣的朋友们可以参考借鉴,下面来一起看看吧。
    2016-10-10
  • docker批量加载镜像的方法实现

    docker批量加载镜像的方法实现

    通常我们批量加载docker镜像文件的时候,通常会写一个shell文件,本文就来介绍一下史上最简单批量加载docker镜像的方法,感兴趣的可以了解一下
    2023-12-12

最新评论