温馨提示×

Docker容器磁盘占满的情况有哪些

发布时间:2021-08-21 11:39:16 阅读:206 作者:小新 栏目:服务器

小编给大家分享一下Docker容器磁盘占满的情况有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

应用日志过多

默认情况下,每个 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容器磁盘占满的情况有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

温馨提示×

网络异常,请检查网络