web-dev-qa-db-ja.com

パーミッションが拒否されました、openshiftのコンテナー内のmkdir

開始コマンドとして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"]
7
ivoba

OpenShiftは、デフォルトで非rootユーザーとしてコンテナーを実行します。その結果、rootとして実行する必要がある場合、アプリケーションが失敗する可能性があります。 rootとして実行するようにコンテナーを構成できるかどうかは、クラスター内のアクセス許可によって異なります。

Rootとして実行する必要がないように、コンテナーとアプリケーションを設計することをお勧めします。

いくつかの提案。

  • DockerfileのUSERステートメントで、アプリケーションを実行する特別なUNIXユーザーを作成し、そのユーザーを(uidを使用して)設定します。ユーザーのグループをルートグループにします。

  • /srcディレクトリとその下にあるすべてのものに対する修正権限は、特別なユーザーによって所有されています。すべてがグループルートであることを確認してください。書き込み可能である必要があるものはすべて、グループルートに書き込み可能であることを確認してください。

  • HOMEDockerfile/srcに設定していることを確認してください。

これが完了すると、OpenShiftがコンテナーを割り当てられたuidとして実行し、グループがルートである場合、すべてがグループ書き込み可能であるため、アプリケーションは/srcの下のファイルを更新できます。設定されているHOME変数は、コードによってホームディレクトリに書き込まれたものがすべて書き込み可能な/src領域に確実に入るようにします。

12

以下のコマンドを実行して、ログインしているプロジェクトへのルートアクセスを許可することもできます。

oc adm policy add-scc-to-user anyuid -z default

2
Gloorfindel