開始コマンドとしてnodejsとpm2を含むコンテナーがあり、OpenShiftで起動時にこのエラーが発生します。
エラー:EACCES:アクセス許可が拒否されました、mkdir '/。pm2'
マラソンのホストで同じ画像を試しましたが、うまくいきました。
UserIdで何かを変更する必要がありますか?
Dockerfile:
FROM node:7.4-Alpine
RUN npm install --global yarn pm2
RUN mkdir /src
COPY . /src
WORKDIR /src
RUN yarn install --production
EXPOSE 8100
CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]
更新
ノードイメージは、イメージをrootとして実行しないように、UID1000の新しいユーザー「ノード」をすでに作成しています。
また、権限を修正し、ユーザー「ノード」をルートグループに追加しようとしました。
さらに、ENV変数でどのdirを使用するかをpm2に伝えました。
PM2_HOME =/home/node/app/.pm2
しかし、それでもエラーが発生します:
Error: EACCES: permission denied, mkdir '/home/node/app/.pm2'
更新されたDockerfile:
FROM node:7.4-Alpine
RUN npm install --global yarn pm2
RUN adduser node root
COPY . /home/node/app
WORKDIR /home/node/app
RUN chmod -R 755 /home/node/app
RUN chown -R node:node /home/node/app
RUN yarn install --production
EXPOSE 8100
USER 1000
CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]
pdate2 GrahamDumpletonのおかげで動作しました
FROM node:7.4-Alpine
RUN npm install --global yarn pm2
RUN adduser node root
COPY . /home/node/app
WORKDIR /home/node/app
RUN yarn install --production
RUN chmod -R 775 /home/node/app
RUN chown -R node:root /home/node/app
EXPOSE 8100
USER 1000
CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"]
OpenShiftは、デフォルトで非rootユーザーとしてコンテナーを実行します。その結果、rootとして実行する必要がある場合、アプリケーションが失敗する可能性があります。 rootとして実行するようにコンテナーを構成できるかどうかは、クラスター内のアクセス許可によって異なります。
Rootとして実行する必要がないように、コンテナーとアプリケーションを設計することをお勧めします。
いくつかの提案。
Dockerfile
のUSERステートメントで、アプリケーションを実行する特別なUNIXユーザーを作成し、そのユーザーを(uidを使用して)設定します。ユーザーのグループをルートグループにします。
/src
ディレクトリとその下にあるすべてのものに対する修正権限は、特別なユーザーによって所有されています。すべてがグループルートであることを確認してください。書き込み可能である必要があるものはすべて、グループルートに書き込み可能であることを確認してください。
HOME
でDockerfile
を/src
に設定していることを確認してください。
これが完了すると、OpenShiftがコンテナーを割り当てられたuidとして実行し、グループがルートである場合、すべてがグループ書き込み可能であるため、アプリケーションは/src
の下のファイルを更新できます。設定されているHOME
変数は、コードによってホームディレクトリに書き込まれたものがすべて書き込み可能な/src
領域に確実に入るようにします。
以下のコマンドを実行して、ログインしているプロジェクトへのルートアクセスを許可することもできます。
oc adm policy add-scc-to-user anyuid -z default