nginx: [emerg] mkdir() “/var/lib/nginx/tmp/client_body” 失败(13:权限被拒绝)
nginx: [emerg] mkdir() "/var/lib/nginx/tmp/client_body" failed (13: Permission denied)
我目前 运行 在尝试设置新用户而不是在我的 docker 文件中使用 root 时遇到问题。图像构建良好,但是当我 运行 容器时,出现以下错误:nginx: [emerg] mkdir() "/var/lib/nginx/tmp/client_body" failed (13: Permission denied)
下面是我的 docker 文件。我正在使用 redhat UBi 映像构建我的 docker 文件:
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
- 您计划与 non-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 文件夹映射到 /var/lib/nginx/tmp/client_body
,因为我没有在图像中看到任何内容被复制。在这种情况下,您必须确保主机上的文件夹可以被 docker 容器中的用户读取。
个人意见:官方nginx
docker图片更好。
我目前 运行 在尝试设置新用户而不是在我的 docker 文件中使用 root 时遇到问题。图像构建良好,但是当我 运行 容器时,出现以下错误:nginx: [emerg] mkdir() "/var/lib/nginx/tmp/client_body" failed (13: Permission denied)
下面是我的 docker 文件。我正在使用 redhat UBi 映像构建我的 docker 文件:
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
- 您计划与 non-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 文件夹映射到 /var/lib/nginx/tmp/client_body
,因为我没有在图像中看到任何内容被复制。在这种情况下,您必须确保主机上的文件夹可以被 docker 容器中的用户读取。
个人意见:官方nginx
docker图片更好。