nginx:[emerg] mkdir()“ / var / lib / nginx / tmp / client_body”失败(13:权限被拒绝)

时间:2020-10-16 13:52:57

标签: bash docker nginx permissions dockerfile

我目前在尝试设置新用户而不是在docker文件中使用root时遇到问题。图像构建良好,但是当我运行容器时,出现以下错误:nginx:[emerg] mkdir()“ / var / lib / nginx / tmp / client_body”失败(13:权限被拒绝)

以下是我的dockerfile。我正在使用redhat UBi映像构建我的dockerfile:

USER root
RUN microdnf --setopt=tsflags=nodocs install -y nginx procps shadow-utils net-tools ca-certificates dirmngr gnupg wget vim\
            && microdnf clean all \
            && rpm -q procps-ng

ENV NGINX_USER="api-gatway" \
    NGINXR_UID="8987" \
    NGINX_GROUP="api-gatway" \
    NGINX_GID="8987"     

RUN set -ex; \
  groupadd -r --gid "$NGINX_GID" "$NGINX_GROUP"; \
  useradd -r --uid "$NGINXR_UID" --gid "$NGINX_GID" "$NGINX_USER" 


COPY nginx.conf /etc/nginx/nginx.conf


#To start up NGINX 
EXPOSE 80
RUN mkdir -p /var/lib/nginx/
RUN mkdir -p /var/log/nginx/

RUN mkdir -p /var/lib/nginx/tmp/


RUN chmod 755  api-gatway:api-gatway /var/lib/nginx/
RUN chmod 755  api-gatway:api-gatway /var/log/nginx/

EXPOSE 80
USER api-gatway
CMD ["nginx", "-g", "daemon off;"]

有什么想法为什么仍然无法解决?

1 个答案:

答案 0 :(得分:0)

此图中有不同的问题:

  • chmod使用不正确
  • 不存在chown
  • 您计划对非root用户使用privileged port(80)

IMO,此Dockerfile部分应解决部分问题:

RUN mkdir -p /var/lib/nginx/tmp /var/log/nginx \
    && chown -R api-gatway:api-gatway /var/lib/nginx /var/log/nginx \
    && chmod -R 755 /var/lib/nginx /var/log/nginx

EXPOSE 1080
USER api-gatway
CMD ["nginx", "-g", "daemon off;"]

请记住也要在nginx配置中更改端口。

最后但并非最不重要的一点,我认为您正在尝试将文件夹映射到/var/lib/nginx/tmp/client_body,因为我看不到图像中正在复制任何内容。在这种情况下,您必须确保用户可以在Docker容器中读取主机上的文件夹。

个人意见:最好使用官方nginx码头工人图像。