Docker Alpine nginx 403 swagger-ui-builder 的禁止错误
Docker Alpine nginx 403 Forbidden error for swagger-ui-builder
这发生在 Ubuntu VirtualBox 16.04 上 Windows 10,docker 版本 1.12.1,swagger-ui version 2.2.2。
我试图在 docker 容器中 uild 和 运行 Swagger UI,按照说明 on their site:
docker build -t swagger-ui-builder .
docker run -p 127.0.0.1:8080:8080 swagger-ui-builder
说明上说现在应该可以看到swagger-ui 运行ning了,但是打开127.0.0.1:8080却只返回了这个页面:
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.8.1</center>
</body>
</html>
这是 Dockerfile 的内容:
FROM alpine:3.3
MAINTAINER Roman Tarnavski
RUN apk add --update nginx
COPY nginx.conf /etc/nginx/
ADD ./dist/ /usr/share/nginx/html
EXPOSE 8080
CMD nginx -g 'daemon off;'
我在 Whosebug 上找到了类似的帖子,但其中 none 帮助我解决了这个问题。我做错了什么以及如何解决这个问题?
问题是由权限请求引起的ui备注:www-data user/group 没有访问网站目录和文件的权限。
此问题已在对此 post 的接受答案中进行了解释:Nginx 403 forbidden for all files
要解决此问题,必须将以下行添加到 Dockerfile 中:
RUN set -x ; \
addgroup -g 82 -S www-data ; \
adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1
RUN chown -R www-data:www-data /usr/share/nginx/html/*
RUN chmod -R 0755 /usr/share/nginx/html/*
命令的上半部分在此要点中进行了解释:https://gist.github.com/briceburg/47131d8caf235334b6114954a6e64922
必须先添加user/group www-data,然后才能为其设置权限。该片段指出 82 是 Alpine
中 "www-data" 的标准 uid/gid
命令的下半部分是另一个论坛中类似问题的解决方案:https://www.digitalocean.com/community/questions/nginx-403-forbidden--2
所以固定的 Dockerfile 看起来像这样:
FROM alpine:3.3
MAINTAINER Roman Tarnavski
RUN apk add --update nginx
COPY nginx.conf /etc/nginx/
ADD ./dist/ /usr/share/nginx/html
RUN set -x ; \
addgroup -g 82 -S www-data ; \
adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1
RUN chown -R www-data:www-data /usr/share/nginx/html/*
RUN chmod -R 0755 /usr/share/nginx/html/*
EXPOSE 8080
CMD nginx -g 'daemon off;'
现在,如果我 rebuild 并重新运行 swagger-ui-builder,该网站将正确显示。
这发生在 Ubuntu VirtualBox 16.04 上 Windows 10,docker 版本 1.12.1,swagger-ui version 2.2.2。
我试图在 docker 容器中 uild 和 运行 Swagger UI,按照说明 on their site:
docker build -t swagger-ui-builder .
docker run -p 127.0.0.1:8080:8080 swagger-ui-builder
说明上说现在应该可以看到swagger-ui 运行ning了,但是打开127.0.0.1:8080却只返回了这个页面:
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.8.1</center>
</body>
</html>
这是 Dockerfile 的内容:
FROM alpine:3.3
MAINTAINER Roman Tarnavski
RUN apk add --update nginx
COPY nginx.conf /etc/nginx/
ADD ./dist/ /usr/share/nginx/html
EXPOSE 8080
CMD nginx -g 'daemon off;'
我在 Whosebug 上找到了类似的帖子,但其中 none 帮助我解决了这个问题。我做错了什么以及如何解决这个问题?
问题是由权限请求引起的ui备注:www-data user/group 没有访问网站目录和文件的权限。
此问题已在对此 post 的接受答案中进行了解释:Nginx 403 forbidden for all files
要解决此问题,必须将以下行添加到 Dockerfile 中:
RUN set -x ; \
addgroup -g 82 -S www-data ; \
adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1
RUN chown -R www-data:www-data /usr/share/nginx/html/*
RUN chmod -R 0755 /usr/share/nginx/html/*
命令的上半部分在此要点中进行了解释:https://gist.github.com/briceburg/47131d8caf235334b6114954a6e64922
必须先添加user/group www-data,然后才能为其设置权限。该片段指出 82 是 Alpine
中 "www-data" 的标准 uid/gid命令的下半部分是另一个论坛中类似问题的解决方案:https://www.digitalocean.com/community/questions/nginx-403-forbidden--2
所以固定的 Dockerfile 看起来像这样:
FROM alpine:3.3
MAINTAINER Roman Tarnavski
RUN apk add --update nginx
COPY nginx.conf /etc/nginx/
ADD ./dist/ /usr/share/nginx/html
RUN set -x ; \
addgroup -g 82 -S www-data ; \
adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1
RUN chown -R www-data:www-data /usr/share/nginx/html/*
RUN chmod -R 0755 /usr/share/nginx/html/*
EXPOSE 8080
CMD nginx -g 'daemon off;'
现在,如果我 rebuild 并重新运行 swagger-ui-builder,该网站将正确显示。