🫚

Docker×Nuxt3 EBUSY: resource busy or locked, rmdir '/app/.output'

2025/01/23に公開

あまりみないエラーに出会ったので記録しておきます。

環境

  • 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