OpenShift部署Angular容器时Nginx的default.conf只读问题求助
解决方案
调整后的Dockerfile如下
FROM node:latest as build WORKDIR /usr/local/app COPY ./ /usr/local/app/ RUN npm install RUN npm run build FROM nginxinc/nginx-unprivileged COPY --from=build /usr/local/app/dist/ng-adminx /usr/share/nginx/html COPY --from=build /usr/local/app/nginx.conf /etc/nginx/conf.d/default.conf # 新增权限适配配置,兼容OpenShift运行规则 RUN chgrp -R 0 /usr/share/nginx/html /etc/nginx/conf.d \ && chmod -R g+rwX /usr/share/nginx/html /etc/nginx/conf.d # 注意将暴露端口改为8080,非root用户无法绑定1024以下端口 EXPOSE 8080
配套修改要求
- 你本地的
nginx.conf配置文件中,监听端口需要同步改为8080,不要使用80端口。
问题根因说明
- OpenShift默认强制使用随机非root UID运行容器,该UID默认归属GID 0的root用户组,本地运行容器时默认用root或固定UID用户,所以不会触发权限问题。
- 官方
nginxinc/nginx-unprivileged镜像默认的配置目录、静态资源目录仅对固定的nginx用户开放读写权限,OpenShift的随机UID没有对应权限,就会触发只读文件系统报错。
可选优化(针对运行时需要修改配置的场景)
如果业务逻辑需要在容器运行时动态修改default.conf,可以额外将/var/cache/nginx、/var/run目录也加入权限调整命令:
RUN chgrp -R 0 /usr/share/nginx/html /etc/nginx/conf.d /var/cache/nginx /var/run \ && chmod -R g+rwX /usr/share/nginx/html /etc/nginx/conf.d /var/cache/nginx /var/run
内容的提问来源于stack exchange,提问作者Han
相关产品推荐
相关产品推荐

