🫚
Docker×Nuxt3 EBUSY: resource busy or locked, rmdir '/app/.output'
あまりみないエラーに出会ったので記録しておきます。
環境
- Docker Desktop for Mac
- Nuxt3.13.0
状況
エラー監視ツールとしてSentryを導入しました。(https://docs.sentry.io/platforms/javascript/guides/nuxt/)
導入後、以下コマンドで、nuxt generate
を実行時に、エラーが起こるようになりました。
(npm run dev
でのローカル開発環境での起動は問題なし)
terminal
# コマンド
docker run -v "$(pwd)/app/.output:/app/.output" \
--name "hogehoge" \
"container_hogehoge" \
bash -c "npm run postinstall; npm run generate"
# エラー
ERROR EBUSY: resource busy or locked, rmdir '/app/.output'
.outputディレクトリは、nuxt3でのbuildしたファイルの格納先で、.outputディレクトリに格納されたファイルをs3にアップロードしてデプロイするためのものでした。
原因
volumeマウントしているディレクトリを削除しようとして、エラーになっていたようです!!
なんで削除しようとしているのかはわからないのですが、Sentry導入後からnuxt generate
時にSentry関連でsourcemapの作成とuploadをするようになったので、その処理の中でディレクトリの削除が入るようになったのかも???根本解決には至りませんでした、、。
とりあえず原因はわかったので、volumeマウントをやめて、
コンテナ内からホストへbuildしたファイルをコピーすることで対処しました。
terminal
docker run --name "hogehoge" \
"container_hogehoge" \
bash -c "npm run postinstall; npm run generate"
# copy assets to local
docker cp "hogehoge":/app/.output ./app
エラー文だけで調べると、docker関連の記事がなく、普通にresourceがロックされてるからだから、使ってるプロセス停止しな〜的なことばかりで困りました。
途中でこれdockerだからか??!と気づけて良かったです。
Discussion