1 風吹けば名無し 2026/10/12(月) 21:09:36 ID:aB3xK9m0
ワイ「ディスク使用率80%て…何が食っとるんや」
docker system df 叩いたらビルドキャッシュが81GB
誰も掃除してなかったんやなコレ
2 風吹けば名無し 2026/10/12(月) 21:10:03 ID:Qz7LpR2d
>>1 81GBは草
docker system prune -a -f をcronに入れとけばええやん
3 風吹けば名無し 2026/10/12(月) 21:10:33 ID:aB3xK9m0
>>2 それが一番やったらアカンやつやで
ワイ最初それ考えたけど怖くて踏みとどまったんや
4 風吹けば名無し 2026/10/12(月) 21:11:06 ID:mN4vTe8s
>>3 なんでや 掃除スクリプトなんやから全部消してなんぼやろ
5 風吹けば名無し 2026/10/12(月) 21:11:27 ID:aB3xK9m0
>>4 実はこのサーバー、compose の profile や CI からしか参照されない現役イメージがあるんや
wordpress:cli-2.10.0-php8.3 とかな
image prune -a は「コンテナに使われてないイメージ」を全部消すから巻き添えになるやで
6 風吹けば名無し 2026/10/12(月) 21:11:51 ID:Yc1HwU5j
>>5 ファッ!? 使ってないように見えて使ってるやつやんけ
7 風吹けば名無し 2026/10/12(月) 21:12:18 ID:aB3xK9m0
>>6 せや 常駐してないだけで必要なやつや
しかも docker volume prune はもっとヤバい
task_demo の DB に実アカウントの実データが入っとるんや
8 風吹けば名無し 2026/10/12(月) 21:12:48 ID:Qz7LpR2d
>>7 volume prune は絶対あかんやつで草
で、結局どう消したんや
9 風吹けば名無し 2026/10/12(月) 21:13:21 ID:aB3xK9m0
>>8 消す範囲を絞ったで
ビルドキャッシュは古いものだけ、イメージはタグなしだけ、コンテナは停止済みの古いものだけや
KEEP_HOURS の既定は168時間(7日)にしたで
docker builder prune --force --filter "until=168h" # 7日より古いビルドキャッシュだけ
docker image prune --force # -a なし。タグなし(dangling)のみ
docker container prune --force --filter "until=168h"
10 風吹けば名無し 2026/10/12(月) 21:13:42 ID:mN4vTe8s
>>9 ええやん でもいきなり本番で消すのは怖いんやが
11 風吹けば名無し 2026/10/12(月) 21:14:06 ID:aB3xK9m0
>>10 それがヤマ場で、まさに怖かったから既定をドライランにしたんや
–apply を付けた時だけ実際に消す
ドライランは消さずに回収可能量と件数だけログに出すで
#!/usr/bin/env bash
set -uo pipefail
APPLY=0
[ "${1:-}" = "--apply" ] && APPLY=1
# ./docker-cleanup.sh # ドライラン(既定。何も削除しない)
# ./docker-cleanup.sh --apply # 実際に削除する
12 風吹けば名無し 2026/10/12(月) 21:14:33 ID:Yc1HwU5j
>>11 ええ設計やん
で、タイトルのvscode-serverは何やねん
13 風吹けば名無し 2026/10/12(月) 21:15:03 ID:aB3xK9m0
>>12 ついでに VS Code Server も溜まっとってな
–enable-remote-auto-shutdown が効かんくて、古いセッションが積み上がるんや
アイドルなセッションだけ止める vscode-server-cleanup.sh も書いたで
14 風吹けば名無し 2026/10/12(月) 21:15:36 ID:Qz7LpR2d
>>13 現役セッション殺したら泣くやろ そこはどうしたんや
15 風吹けば名無し 2026/10/12(月) 21:15:57 ID:aB3xK9m0
>>14 安全装置を4つ入れたで
1. ログ最終更新が IDLE_HOURS(既定24h)以内なら触らん
2. 一番新しく動いたセッションは常に除外
3. ログディレクトリが特定できんやつは触らん
4. IDLE_HOURS以内に起動した子プロセスがあれば作業中とみなして保持
判断つかんものは触らん方針や
# 子孫プロセスの引数から --logsPath を探す
d=$(tr '\0' '\n' < "/proc/$k/cmdline" 2>/dev/null | grep -A1 -x -- '--logsPath' | tail -1)
# ログディレクトリが特定できないセッションは触らない
log " [保持] PID $pid : ログディレクトリを特定できず(安全側に倒して保持)"
16 風吹けば名無し 2026/10/12(月) 21:16:21 ID:aB3xK9m0
>>15 掃除スクリプトで一番大事なのは「何を消すか」より「何を消さないか」やと思い知ったわ
消さない側はコメントで明文化して、実装もせんようにしたで
# 以下は意図的に実装していない
# docker volume prune # DBの実データが入っているボリュームを巻き込む
# docker image prune -a # compose の profile / CI からしか参照されない現役イメージが消える
17 風吹けば名無し 2026/10/12(月) 21:16:48 ID:Yc1HwU5j
>>16 ワイもcronに prune -a 仕込んどったわ…今夜見直すで
18 風吹けば名無し 2026/10/12(月) 21:17:18 ID:aB3xK9m0
>>17 定期的に掃除する仕組みは、消さない物を決めてから作るのが先やで