rel*_*one 6 nginx root openshift docker alpine-linux
我目前在尝试在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:权限被拒绝)
现在我知道Openshift在权限方面有些棘手,因为该容器在没有root特权的情况下运行,并且UID在运行时更新,这意味着它在/ etc / passwd中不可用。但是用户是组根的一部分。现在在这里描述应该如何处理
我什至走得更远,为了测试目的使整个/ var完全可访问(777),但仍然出现错误。这就是我的Dockerfile的样子
Docker文件
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
Run Code Online (Sandbox Code Playgroud)
有趣的是,这种方法似乎影响了nginx的高山版本。nginx:latest(我认为基于debian)没有问题,此处介绍了设置方法
https://torstenwalter.de/openshift/nginx/2017/08/04/nginx-on-openshift.html
作品。(但是我在构建时遇到其他问题,所以我改用了阿尔卑斯山)
任何想法为什么仍然无法正常工作?
为了解决这个问题。我认为这个 Dockerfile 中的问题是我使用 COPY 命令来移动我的构建并且不存在。所以这是我的工作
文件
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 Code Online (Sandbox Code Playgroud)
请注意,在构建应用程序部分我现在做
RUN cp -r ./dist/. /usr/share/nginx/html
Run Code Online (Sandbox Code Playgroud)
代替
COPY ./dist/my-app /usr/share/nginx/html
Run Code Online (Sandbox Code Playgroud)
复制将不起作用,因为我之前在容器内运行了ng build,dist 也仅存在于容器中,因此我需要在该容器内执行复制命令
我使用的是权限有限的 openshift,所以我使用以下 nginx 映像(而不是nginx:latest)解决了这个问题
FROM nginxinc/nginx-unprivileged
Run Code Online (Sandbox Code Playgroud)
nginx:alpine我的Dockerfile上有同样的错误
nginx图像中已经有一个用户打电话nginx:alpine。我的猜测是用它来运行 nginx 会更干净。
我是这样解决的:
/var/cache/nginx(nginx用户101,组101)/var/run/nginx.pid设置所有者nginx--chown=nginx:nginxFROM nginx:alpine
RUN touch /var/run/nginx.pid && \
chown -R nginx:nginx /var/cache/nginx /var/run/nginx.pid
USER nginx
COPY --chown=nginx:nginx my/html/files /usr/share/nginx/html
COPY --chown=nginx:nginx config/myapp/default.conf /etc/nginx/conf.d/default.conf
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3131 次 |
| 最近记录: |