Bash nginx:[emerg]mkdir()/var/lib/nginx/tmp/client“主体”;失败(13:权限被拒绝)

Bash nginx:[emerg]mkdir()/var/lib/nginx/tmp/client“主体”;失败(13:权限被拒绝),bash,docker,nginx,permissions,dockerfile,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 shad

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


你知道为什么这仍然不起作用吗?

这张图片中有不同的问题:

  • chmod
    使用不正确
  • 不存在
    chown
  • 您计划对非root用户使用(80)
在我看来,此Dockerfile部分可以解决您的部分问题:

运行mkdir-p/var/lib/nginx/tmp/var/log/nginx\
&&chown-rapigatway:api gatway/var/lib/nginx/var/log/nginx\
&&chmod-R 755/var/lib/nginx/var/log/nginx
曝光1080
用户api网关
CMD[“nginx”,“-g”,“守护进程关闭;”]
记住在nginx配置中也要更改端口

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


个人意见:你最好使用官方的
nginx
docker图像。

它真的能够构建吗?
chmod
似乎与
chown
混淆了。此外,为什么不使用nginx映像呢?很抱歉,我取出了chown命令并用chmod替换了它,映像确实生成了,但运行它会给我提供上面的ERORR。由于工作需要,必须使用redhat图像。Shi,感谢您的回复,这已经解决了我的这部分问题:)。由于工作需要,使用redhat图像在出现错误时没有帮助。我想知道这对他有什么帮助。我很想知道为什么即使文件夹
/var/lib/nginx/tmp
拥有775权限,并且由运行nginx的用户和组拥有,我也会收到相同的错误消息。即使使用该用户的mkdir也会失败。您确定该用户可以遍历文件夹并到达
/var/lib/nginx/tmp