1. 首页
  2. 技术知识

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
补充

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

总结

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

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/107888.html

联系我们