前言
本文是我自己最近遇到的兩種情況,后續有新發現再補充。
參考文檔: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
補充
寫的比較急,貼的鏈接中都有非常完整的信息,應該都能解決此類問題。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。