官方 nginx docker 在提供静态文件时给出 403 Forbidden

Posted

技术标签:

【中文标题】官方 nginx docker 在提供静态文件时给出 403 Forbidden【英文标题】:Official nginx docker gives 403 Forbidden when serving static files 【发布时间】:2020-01-21 18:51:58 【问题描述】:

我正在使用 nginx docker image 提供一个简单的 index.html 文件。 如快速指南中所述,我有一个 Dockerfile,其中包含:

FROM nginx

COPY www-root-dir /usr/share/nginx/html

(www-root-dir 只包含一个index.html 文件) 但是当我运行这个图像时,它返回 403 Forbidden。在日志中它说:

 [error] 7#7: *2 "/usr/share/nginx/html/index.html" is forbidden (13: Permission denied),

我已经对此进行了搜索,并且知道它与文件权限有关。 但是我应该为此设置什么权限/所有者?我试过chowning 到www-datanginxchmoding +rwx 也没有帮助。 我的问题是:我到底应该怎么做?而且无论解决方案是什么,为什么官方文档中没有提到?

编辑:

我也尝试过不使用自定义 html 文件。 这个简单的 Dockerfile 响应相同:

FROM nginx
# Just it!

【问题讨论】:

没有自定义html文件能成功运行吗?你映射了 80 端口吗? @Andrea 端口正常,因为我连接并看到 nginx 403 消息!但是,没有 index.html 也会发生同样的错误。 【参考方案1】:
FROM nginx:alpine

COPY directory_containing_index  /usr/share/nginx/html

这对我来说很好。

与 ubuntu 等同类产品相比,alpine 版本的体积非常小。 您可以在不定义自己的 Dockerfile 的情况下对其进行测试,

docker run --rm -v /directory_containing_index:/usr/share/nginx/html -p 8080:80 nginx:alpine

【讨论】:

这意味着 nginx:latest 有问题并且无法工作?但是,我接受了答案,因为绕过了我的问题。谢谢

以上是关于官方 nginx docker 在提供静态文件时给出 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Docker 上使用 Nginx 和 Django 提供静态文件?

使用 Docker、nginx 和 gunicorn 提供 Django 静态文件

如何使用 docker 映像生成静态文件以从 nginx 映像提供服务?

django 和 gunicorn 在 docker 容器内运行时,无法在 ec2 上使用 nginx 提供静态文件

NGINX 不提供收集的静态文件

nginx入门:静态服务搭建