dockerのファイル権限に悩みました。
node.jsの実行環境を作っています。
参考にするべきは、node.jsの公式HPです。
こちらに、方法が書かれているので、これが正解です。
横着しようと、google検索で調べたために、遠回りしました。
rootユーザーで実行するなら、これで終わりです。
nodeユーザーで実行しようとしたのが、今回の迷走の原因でした。
nodeユーザーで実行しようとすると、volumeのファイルの権限を意識する必要がありました。
例えば、このようなエラーが発生しました。
npm WARN checkPermissions Missing write access to
公式のHPのように、ソースをコンテナ内の/usr/src/appに置くなら、Dockerfileに、
RUN chmod node:node /usr/src/app
を追加することで解決しました。
これを行わないと、npm install時に、アクセス権限のないフォルダ内で、フォルダの作成を行おうとすることになり、エラーとなります。
こう書くと、単純な話ですが、これに、volumeのバインドが絡んでいたため、非常に苦労しました。
結局、volumeをバインドする必要はないと気づき、コンテナ内にファイルをコピーすること(公式HPのまま)で解決しました。
プログラムの開発時は、volumeのバインドが必要になるため、もっと、ややこしいことになります。
gitの管理をコンテナの中で行うのか、外で行うのか。
gitの管理をコンテナ内で行うなら、完全に、外と分離するのか。
それとも、ローカルとのファイル共有を行うなら、競合を発生させないために、どうするべきか。
開発マシンが、linuxでもwindowsでも動くようにするには、どうするのか。
コンテナ内では、rootで実行するのか、あるいは、nodeかvscodeか。
これらを考えて、試行錯誤すると、ソースのファイル権限の関係で、エラーが発生します。
発生するのは、npm installの行ですが、他にも、WORKDIRで指定したフォルダがないというエラーが発生したりします。
buildの1回目にエラーが出て、2回目はエラーが出ないという現象にも遭遇し、頭の中は、大混乱です。
とりあえず、実行環境が完成したので、一歩前進です。
0 件のコメント:
コメントを投稿