• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Docker容器磁盘占满的一些情况汇总
    POST TIME:2021-10-16 17:25

    前言

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

    参考文档: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

    补充

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

    总结

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

    上一篇:CentOS下使用LibreOffice实现文档格式的转换方式
    下一篇:详解nginx upstream 配置和作用
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信