本文是我自己最近遇到的两种情况,后续有新发现再补充。
参考文档:
https://docs.docker.com/engine/reference/commandline/dockerd/
应用日志过多
默认情况下,每个 Docker 容器都有 10G 的存储空间,当超出该大小时,容器就会出现问题。
可以参考官方文档 dm.basesize 参数的说明来修改默认的容器大小:
指定创建基本设备时要使用的大小,这会限制图像和容器的大小。默认值为10G。请注意,精简设备本质上是“稀疏的”,因此大多数空的10G设备不会在池上使用10 GB的空间。但是,文件系统将为空盒使用更多空间,设备越大。
可以在守护进程重启时增加基本设备大小,这将允许所有未来的图像和容器(基于这些新图像)具有新的基本设备大小。
例子
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
可以参考如下几种解决方案:
启动容器参数
参考:https://docs.docker.com/engine/reference/commandline/run/
使用 —log-opt Log driver options 配置日志策略。
例如: —log-opt max-size=50m。全局默认配置
在 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
补充
写的比较急,贴的链接中都有非常完整的信息,应该都能解决此类问题。
————————————————
版权声明:本文为CSDN博主「isea533」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/isea533/article/details/95197468
