0

这发生在 Windows 10 的 VirtualBox 中的 Ubuntu 16.04 上,docker 版本为 1.12.1,swagger-ui 版本为 2.2.2

我试图按照他们网站上的说明在docker 容器中构建和运行 Swagger UI :

码头工人建造-t swagger-ui-builder 。

docker run -p 127.0.0.1:8080:8080 swagger-ui-builder

该指令说现在我应该能够查看正在运行的 swagger-ui,但是,当我打开 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;'

我在 stackoverflow 上找到了类似的帖子,但没有一个可以帮助我解决这个问题。我做错了什么以及如何解决这个问题?

4

1 回答 1

0

问题是由权限要求引起的:www-data 用户/组无权访问网站的目录和文件。

此问题已在此帖子的已接受答案中进行了解释:所有文件都禁止 Nginx 403

为了解决这个问题,必须在 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

必须先添加用户/组 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;'

现在,如果我重建并重新运行 swagger-ui-builder,网站会正确显示。

于 2016-08-31T09:31:06.927 回答