Lima + Dockerでマウントしたディレクトリにnpm installできなかった


やろうとしていたこと

Graviton2インスタンスのLambdaで利用するライブラリをLambda Layerに配置すべく、Lambda (Amazon Linux)のイメージを利用してLayer用のzipを作成。
実行環境はタイトルの通りLima + Docker。

コンテナ上でやろうとしたこと

  1. workspace をマウント
  2. マウントしたディレクトリに nodejs ディレクトリを作成して、そこで npm install
  3. nodejs ディレクトリを zip
├── Dockerfile
├── docker-compose.yml
└── workspace
    ├── lambda-layer.zip
    └── nodejs
        └── node_modules

起きたこと

npm install で権限エラー。 (l)chown が叩けない旨のメッセージが表示される。

実際、マウントしたディレクトリ以下では chown ができない。
一方、ファイル作成等はでき、書き込み権限やオーナーは問題ない。

原因

chown/chmod on mounted directory: Permission denied #231

回避策

別の場所でインストールして、 zipだけをマウントしたディレクトリに吐き出す

前述の通り権限・オーナーには問題がないので、必要なzipだけを吐き出す。

グローバルインストール (-g) して、〃

グローバルインストールで権限等の問題が起きる場合は公式を参照。