Docker 容器磁碟佔滿的幾種情況

2021-10-03 07:35:43 字數 3121 閱讀 7142

本文是我自己最近遇到的兩種情況,後續有新發現再補充。

參考文件:

應用日誌過多

預設情況下,每個 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

參考: ... g-all-my-disk-space

可以參考如下幾種解決方案:

1. 啟動容器引數

參考:使用 --log-opt log driver options 配置日誌策略。

例如: --log-opt max-size=50m。

2. 全域性預設配置

在 daemon.json 中配置,linux 中預設位置為 /etc/docker。

配置示例:

}日誌配置參考:

完整 daemon.json 示例參考:

,"storage-driver": "",

"storage-opts": ,

"labels": ,

"live-restore": true,

"log-driver": "json-file",

"log-opts": ,

"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":

},"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": ,

"custom":

},"default-address-pools":[,]}

配置引數後需要重啟 docker 服務。

docker-compose 配置

參考:配置示例:

logging:

options:

max-size: '12m'

max-file: '5'

driver: json-file

補充寫的比較急,貼的鏈結中都有非常完整的資訊,應該都能解決此類問題。

Docker 磁碟佔滿解決方案

2020 11 16 發現線上服務訪問不了報以下錯誤 登入伺服器df h 檢視docker的overlay已用 100 然後查詢 linux 系統最大的10個檔案 find type f print0 xargs 0 du sort n tail 10 cut f2 xargs i du sh 找出...

Docker容器磁碟滿了

容器磁碟空間擴容 登入節點vi etc docker daemon.json 檔案,增加一條 dm.basesize 15g 如下截圖所示 然後重啟docker systemctl restart docker注意 節點資料盤 docker專用 在evs介面擴容docker盤。登入目標節點。然後在節...

Docker 進入容器的幾種方式

進入docker容器比較常見的幾種做法如下 docker提供了attach命令來進入docker容器。接下來我們建立乙個守護態的docker容器,然後使用docker attach命令進入該容器。sudo docker run itd ubuntu 14.04 bin bash 然後我們使用dock...