web-dev-qa-db-ja.com

Openshift Nginx権限の問題[nginx:[emerg] mkdir() "/ var / cache / nginx / client_temp" failed(13:Permission denied)]

私は現在Openshiftでnginx:Alpineを設定しようとする問題に直面しています。

ビルドは正常に実行されますが、次のエラーで拒否された権限でデプロイできません

2019/01/25 06:30:54 [emerg] 1#1:mkdir() "/ var/cache/nginx/client_temp"が失敗しました(13:権限が拒否されました)

nginx:[emerg] mkdir() "/ var/cache/nginx/client_temp"が失敗しました(13:権限が拒否されました)

コンテナーがroot権限なしで実行されており、UIDがrunetimeで生成されるため、/ etc/passwdで使用できないため、Openshiftは権限に関して少しトリッキーです。ただし、ユーザーはグループルートの一部です。これがどのように処理されることになっているのかがここで説明されています

https://docs.openshift.com/container-platform/3.3/creating_images/guidelines.html#openshift-container-platform-specific-guidelines

さらに進んで、テストのために/ var全体を完全にアクセス可能(777)にしましたが、それでもエラーが発生します。これは私のDockerfileがどのように見えるかです

Dockerfile

FROM nginx:Alpine

#Configure proxy settings
ENV HTTP_PROXY=http://my.proxy:port
ENV HTTPS_PROXY=http://my.proxy:port
ENV HTTP_PROXY_AUTH=basic:*:username:password

WORKDIR /app
COPY . .

# Install node.js
RUN apk update && \
    apk add nodejs npm python make curl g++


# Build Application
RUN npm install
RUN ./node_modules/@angular/cli/bin/ng build
COPY ./dist/my-app /usr/share/nginx/html

# Configure NGINX
COPY ./openshift/nginx/nginx.conf /etc/nginx/nginx.conf
COPY ./openshift/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf

RUN chgrp -R root /var/cache/nginx /var/run /var/log/nginx && \
    chmod -R 777 /var
RUN sed -i.bak 's/^user/#user/' /etc/nginx/nginx.conf

EXPOSE 8080

このアプローチがnginxのアルパインバージョンを有効にしているように見えるのはおかしいです。 nginx:latest(私が思うdebianに基づく)には問題がなく、それを設定する方法はここで説明されています

https://torstenwalter.de/openshift/nginx/2017/08/04/nginx-on-openshift.html

動作します。 (しかし、私はそのビルドで他のいくつかの問題を抱えているので、アルパインに切り替えました)

これがまだ機能しない理由はありますか?

8
relief.melone

これを解決するには。このDockerfileの問題は、ビルドを移動するためにCOPYコマンドを使用したことでしたが、それは存在しませんでした。これが私の仕事です

Dockerfile

FROM nginx:Alpine

LABEL maintainer="ReliefMelone"

WORKDIR /app
COPY . .

# Install node.js
RUN apk update && \
    apk add nodejs npm python make curl g++


# Build Application
RUN npm install
RUN ./node_modules/@angular/cli/bin/ng build --configuration=${BUILD_CONFIG}
RUN cp -r ./dist/. /usr/share/nginx/html

# Configure NGINX
COPY ./openshift/nginx/nginx.conf /etc/nginx/nginx.conf
COPY ./openshift/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf

RUN chgrp -R root /var/cache/nginx /var/run /var/log/nginx && \
    chmod -R 770 /var/cache/nginx /var/run /var/log/nginx

EXPOSE 8080

CMD ["nginx", "-g", "daemon off;"]

Build Applicationセクションの下にあることに注意してください

RUN cp -r ./dist/. /usr/share/nginx/html

の代わりに

COPY ./dist/my-app /usr/share/nginx/html

以前コンテナ内でng buildを実行したため、コピーは機能しません。distはコンテナ内にも存在するだけなので、そのコンテナ内でコピーコマンドを実行する必要があります。

1
relief.melone

権限が制限されたopenshiftを使用していたため、次のnginxイメージ(nginx:latestではなく)を使用してこの問題を修正しました

FROM nginxinc/nginx-unprivileged 
1
quasipolynomial