2021年4月25日日曜日

docker ファイル権限に悩む

 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 件のコメント:

コメントを投稿