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

nfzehxib  于 2023-05-06  发布在  Nginx
关注(0)|答案(1)|浏览(285)

我目前遇到了一个问题,试图在我的docker文件中设置一个新用户,而不是使用root。镜像构建得很好,但是当我运行容器时,我得到以下错误:

nginx: [emerg] mkdir() "/var/lib/nginx/tmp/client_body" failed (13: Permission denied)

下面是我的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;"]

你知道为什么这还是不起作用吗?

7bsow1i6

7bsow1i61#

此图像中存在不同的问题:

  • 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配置中更改端口。
最后但并非最不重要的一点是,我认为您试图将a文件夹Map到/var/lib/nginx/tmp/client_body,因为我没有看到图像中复制的任何内容。在这种情况下,你必须确保主机上的文件夹可以被docker容器中的用户读取。
个人观点:你最好使用官方的nginx docker镜像。

相关问题