
仕事でDockerを使っていて、新たにコンテナにイメージを追加しようとしたら、次のようなエラーが出て、buildできなくなった。
dockerでmaildevをセットして使っていたんだけど、playwrightをセットしたら、以下のようなエラーが出た。
Error: ENOSPC: no space left on device, mkdir '/tmp/maildev-1'
at Object.mkdirSync (node:fs:1363:26)
at createMailDir (/home/node/lib/mailserver.js:157:8)
at mailServer.create (/home/node/lib/mailserver.js:178:3)
at new module.exports (/home/node/index.js:33:14)
at Object.<anonymous> (/home/node/bin/maildev:9:17)
at Module._compile (node:internal/modules/cjs/loader:1565:14)
at Object..js (node:internal/modules/cjs/loader:1708:10)
at Module.load (node:internal/modules/cjs/loader:1318:32)
at Function._load (node:internal/modules/cjs/loader:1128:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14) {
errno: -28,
code: 'ENOSPC',
syscall: 'mkdir',
path: '/tmp/maildev-1'
}
Node.js v22.12.0
ちなみに、説明すると、maildevという、docker内でメールの受信を行う開発用のイメージのエラーだという事はわかる。
でも、今回追加したのは、
Playwrightという、自動テストを行うツールのイメージ・・・
エラーが出たら、スキルアップの兆しをモットーにやってきた自分としては、こんな意味のわからないエラーに挫けず、対応をしたいと思います。
とりあえずチャッピーに聞け!
ググらずに、今の時代は、AIに聞く方が早い。
特にプログラミングのエラーは、SEO検索などでは、ピンポイントは回答を見つけるだけで骨が折れる。
ChatGPTの回答
原因はほぼ コンテナの /tmp か Docker Volume が埋まっている こと。
Playwright が CI用途で tmp に大量のキャッシュや Chromium データを突っ込む
→ maildev が /tmp/maildev-1 を作ろうとしたけど容量不足、という流れ。
よくある解決方法
・/tmp の容量制限を上げる
・maildev の保存先を変更
・Docker ボリューム・builder cache を削除
対処案(順番に試す)
Docker全キャッシュ削除
docker system prune -af
docker volume prune -f
→ これで50GB以上空く場合がある。
maildev の tmp パスを固定ディレクトリに変更
maildev:
image: maildev/maildev
command: ["--base-pathname", "/mail"]
volumes:
- ./maildata:/tmp/maildev
tmpfs サイズを増やす(/tmp が tmpfs の場合)
maildev:
image: maildev/maildev
tmpfs:
- /tmp:exec,size=512m
Playwright の cache を削除
rm -rf ~/.cache/ms-playwright/
Playwright が Docker 内部で causing scenario
・Chromium
・WebKit
・Firefox
これらをインストールすると /tmp と /root/.cache にガッツリ使う。
特に CI 用 docker image は /tmp が 64MBとか制限されている ケースがある。
結論
・Docker のストレージ不足による ENOSPC
・Maildev の /tmp を別 volume に移すのが安定解
・Docker キャッシュを prune して、必要なら /tmp を拡張
全キャッシュ削除を決行!
別にdockerのイメージに愛着があるわけではなく、一旦クリアにするのは厭わない。
なので、次のコマンドを実行
docker system prune -af
綺麗さっぱりと、イメージがクリアされたので、"docker compose up -d"を実行したところ、アホみたいにbuildに時間がかかってしまった・・・
でも、何事もなく、立ち上がるようになって、仕事は進められるようになった。
一応、念のために、maildevのイメージボリュームがまた膨れ上がらないようにするために、
「maildev の tmp パスを固定ディレクトリに変更」もセットしておくことにした。
あとがき
今回実行した、dockerのイメージ全削除コマンドは、これまで一度も使ったことなかったし、知りもしなかったコマンド。
こんなピンポイントに教えてくれるチャッピー君に感謝するとともに、
自分のスキルを一つ押し上げてくれたエラーにも感謝の意を込めるとしよう。
あれ?、このdocker使っている他のチームエンジニアにも、同じようなエラーが発生することが想定される。
共有して修正手順をドキュメント化しておかなければいけないね。
めんどくさいから、このブログを読んでもらおう!!!
0 件のコメント:
コメントを投稿