l

o

a

d

i

n

g

.

.

.

Dockerで「Error: ENOSPC: no space left on device, ...」エラーが出たら読むブログ

2026/01/06

Docker トラブル

t f B! P L
yecatch 仕事で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使っている他のチームエンジニアにも、同じようなエラーが発生することが想定される。 共有して修正手順をドキュメント化しておかなければいけないね。 めんどくさいから、このブログを読んでもらおう!!!

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ