【问题标题】:nginx: [emerg] mkdir() "/var/lib/nginx/tmp/client_body" failed (13: Permission denied)nginx: [emerg] mkdir() "/var/lib/nginx/tmp/client_body" 失败 (13: Permission denied)
【发布时间】:2021-01-31 01:25:00
【问题描述】:

我目前在尝试设置新用户而不是在我的 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;"]

任何想法为什么这仍然不起作用?

【问题讨论】:

  • 它真的可以构建吗? chmod 似乎与 chown 混淆了。而且为什么不用nginx镜像呢?
  • 对不起,我取出了 chown 命令并用 chmod 替换了它,图像确实建立了,但运行它会给我上述错误。由于工作需要,必须使用redhat image
  • chmod +x /var/lib/nginx -R

标签: bash docker nginx permissions dockerfile


【解决方案1】:

这张图片有不同的问题:

  • chmod 使用不当
  • chown 不存在
  • 您计划将 privileged port (80) 用于非 root 用户

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 文件夹映射到 /var/lib/nginx/tmp/client_body,因为我没有看到图像中复制了任何内容。在这种情况下,您必须确保 docker 容器中的用户可以读取主机上的文件夹。

个人意见:最好还是官方nginxdocker镜像。

【讨论】:

  • 您好,感谢您的回复,这解决了我的这部分问题:)。因工作需要使用redhat图片
  • 如果出现该错误,这无济于事。我想知道这对他有什么帮助。我很想知道为什么即使文件夹/var/lib/nginx/tmp 的权限为 775 并且归运行 nginx 的用户和组所有,我也会收到相同的错误消息。甚至该用户的 mkdir 也会失败。
  • 您确定用户可以遍历文件夹并到达/var/lib/nginx/tmp吗?
猜你喜欢
  • 2019-12-17
  • 2019-06-18
  • 1970-01-01
  • 2022-01-23
  • 2013-08-31
  • 2021-11-08
  • 2018-11-02
  • 2016-06-06
  • 2015-05-25
相关资源
最近更新 更多