Ошибка разрешения Openshift Nginx [nginx: [emerg] mkdir () "/ var / cache / nginx / client_temp" не удалась (13: разрешение отклонено)] - PullRequest
0 голосов
/ 25 января 2019

В настоящее время я сталкиваюсь с проблемой, пытаясь настроить nginx: alpine в Openshift.

Моя сборка работает нормально, но я не могу выполнить развертывание с отклоненным разрешением со следующей ошибкой

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: разрешение отклонено)

Теперь я знаю, что Openshift немного сложнее, когда речь идет о разрешениях во время работы контейнерабез привилегий root и UID генерируется во время выполнения, что означает, что он недоступен в / etc / passwd.Но пользователь является частью группы root.Теперь, как это должно быть обработано, описывается здесь

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: последняя (основанная на Debian, я думаю) не имеет проблем, и способ ее установки описан здесь

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

работает.(но у меня есть некоторые другие проблемы с этой сборкой, поэтому я перешел на alpine)

Есть идеи, почему это все еще не работает?

1 Ответ

0 голосов
/ 12 июля 2019

Чтобы решить эту проблему.Я думаю, что проблема в этом 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;"]

Обратите внимание, что в разделе Приложение для сборки я теперь выполняю

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

вместо

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

Копия не будет работать, поскольку я ранее запустил ng build внутри контейнера, dist также будет существовать только в контейнере, поэтому мне нужновыполнить команду копирования внутри этого контейнера

...