前言
本文是我自己最近遇到的兩種情況,后續(xù)有新發(fā)現(xiàn)再補充。
參考文檔:https://docs.docker.com/engine/reference/commandline/dockerd/
應(yīng)用日志過多
默認情況下,每個 Docker 容器都有 10G 的存儲空間,當超出該大小時,容器就會出現(xiàn)問題。
可以參考官方文檔 dm.basesize 參數(shù)的說明來修改默認的容器大?。?/p>
指定創(chuàng)建基本設(shè)備時要使用的大小,這會限制圖像和容器的大小。默認值為10G。請注意,精簡設(shè)備本質(zhì)上是“稀疏的”,因此大多數(shù)空的10G設(shè)備不會在池上使用10 GB的空間。但是,文件系統(tǒng)將為空盒使用更多空間,設(shè)備越大。
可以在守護進程重啟時增加基本設(shè)備大小,這將允許所有未來的圖像和容器(基于這些新圖像)具有新的基本設(shè)備大小。
例子
$ sudo dockerd --storage-opt dm.basesize=50G
這將使基本設(shè)備大小增加到50G。如果現(xiàn)有基本設(shè)備大小大于50G,Docker守護程序?qū)伋鲥e誤。用戶可以使用此選項擴展基本設(shè)備大小,但不允許縮小。
此值會影響系統(tǒng)范圍的“基本”空文件系統(tǒng),該文件系統(tǒng)可能已被拉出的圖像初始化和繼承。通常,更改此值需要執(zhí)行其他步驟:
$ sudo service docker stop
$ sudo rm -rf /var/lib/docker
$ sudo service docker start
我在這里遇到的問題是因為某個模塊會在 10 分鐘內(nèi)輸出 1G 的日志,修改日志策略后可以解決該問題。
Dockerd 日志過多
有一個 GitLab 的 docker 服務(wù),運行幾個月后就會出現(xiàn)無法 push 和 pull 的情況,原因都是因為 /var/lib/docker 磁盤空間已滿導(dǎo)致的。而導(dǎo)致磁盤空間占滿的原因是因為 dockerd 的日志占用了十幾G的空間導(dǎo)致的。
日志文件的路徑形如: /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
參考:https://stackoverflow.com/questions/31829587/docker-container-logs-taking-all-my-disk-space
可以參考如下幾種解決方案:
1. 啟動容器參數(shù)
參考: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}]
}
配置參數(shù)后需要重啟 docker 服務(wù)。
docker-compose 配置
參考:https://docs.docker.com/compose/compose-file/compose-file-v2/
配置示例:
logging:
options:
max-size: '12m'
max-file: '5'
driver: json-file
補充
寫的比較急,貼的鏈接中都有非常完整的信息,應(yīng)該都能解決此類問題。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。