web-dev-qa-db-fra.com

Échec du problème d'autorisation d'Openshift Nginx [nginx: [Emerg] mkdir () "/ var / cache / nginx / client_temp" a échoué (13: autorisation refusée)]

Je rencontre actuellement un problème lors de la configuration de nginx: Alpine dans Openshift.

Ma version fonctionne très bien mais je ne suis pas en mesure de déployer avec l'autorisation refusée avec l'erreur suivante

25/01/2019 06:30:54 [Emerg] 1 # 1: mkdir () "/ var/cache/nginx/client_temp" a échoué (13: autorisation refusée)

nginx: [Emerg] mkdir () "/ var/cache/nginx/client_temp" a échoué (13: autorisation refusée)

Maintenant, je sais que Openshift est un peu délicat en ce qui concerne les autorisations car le conteneur s'exécute sans privilèges root et l'UID est généré lors de l'exécution, ce qui signifie qu'il n'est pas disponible dans/etc/passwd. Mais l'utilisateur fait partie de la racine du groupe. Maintenant, comment cela est censé être géré est décrit ici

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

Je suis même allé plus loin et j'ai rendu l'ensemble/var complètement accessible (777) à des fins de test, mais je reçois toujours l'erreur. Voici à quoi ressemble mon 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

C'est drôle que cette approche semble juste effekt la version alpine de nginx. nginx: le dernier (basé sur Debian je pense) n'a aucun problème et la façon de le configurer est décrite ici

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

travaux. (mais j'ai d'autres problèmes avec cette version, je suis donc passé à Alpine)

Des idées pourquoi cela ne fonctionne toujours pas?

8
relief.melone

Pour résoudre cela. Je pense que le problème dans ce Dockerfile était que j'ai utilisé la commande COPY pour déplacer ma version et qu'elle n'existait pas. Voici donc mon travail

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;"]

Notez que sous la section Build Application je fais maintenant

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

au lieu de

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

La copie ne fonctionnera pas comme j'ai précédemment exécuté le ng build à l'intérieur du conteneur, la dist n'existera également que dans le conteneur, donc je dois exécuter la commande de copie à l'intérieur de ce conteneur

1
relief.melone

J'utilisais openshift, avec des autorisations limitées, j'ai donc résolu ce problème en utilisant l'image nginx suivante (plutôt que nginx:latest)

FROM nginxinc/nginx-unprivileged 
1
quasipolynomial