作者 | isea533
轉自 | CSDN博客
責編 | 阿禿
參考文檔:
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