Docker nginx + php回复403 Forbidden

Tau*_*ana 1 php nginx docker

当我想测试容器化的 PHP 项目时,我遇到了这个问题。所以我在我的笔记本电脑上安装了 docker(下面包含的版本),然后我创建 nginx 容器,并将 php 信息文件附加到/usr/share/nginx/html. 但是当我检查结果时,我得到了403 Forbidden。我尝试将 php 信息文件转换为 HTML 文件,效果很好!但是当我将其改回 php info 时,我得到了 403 Forbidden。我还尝试在容器本身上安装 php 和 php-fpm 。但没有任何改变。你们能帮帮我吗?

这是我的docker version输出

versionClient: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:18:20 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:16:15 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
Run Code Online (Sandbox Code Playgroud)

这是位于的 php 信息文件/home/taufik/Documents/praktikum/docker/30-mar-2021/sosial-media/html

<?php
phpinfo();
?>
Run Code Online (Sandbox Code Playgroud)

这是我运行 nginx 容器的 docker 命令

versionClient: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:18:20 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:16:15 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
Run Code Online (Sandbox Code Playgroud)

这是nginx容器的日志

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
,/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
,/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
,10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
,10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
,/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
,/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
,/docker-entrypoint.sh: Configuration complete; ready for start up
,2021/03/30 09:33:02 [error] 32#32: *1 directory index of "/usr/share/nginx/html/" is forbidden, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", host: "0.0.0.0:8080", referrer: "http://0.0.0.0:9000/"
,172.17.0.1 - - [30/Mar/2021:09:33:02 +0000] "GET / HTTP/1.1" 403 555 "http://0.0.0.0:9000/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" "-"
,
Run Code Online (Sandbox Code Playgroud)

提前致谢

kol*_*nte 6

这个错误:

\n
2021/03/30 09:33:02 [error] 32#32: *1 directory index of "/usr/share/nginx/html/" is forbidden, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", host: "0.0.0.0:8080", referrer: "http://0.0.0.0:9000/"\n
Run Code Online (Sandbox Code Playgroud)\n

听起来您的 php 文件不是 anindex.php并且您正在尝试访问位于 的服务器/,但没有文件名。然后它会尝试向您显示目录列表(您安装的目录中的所有内容/usr/share/nginx/html/,但默认配置不允许这样做。因此会出现 403,因为配置禁止显示目录列表。

\n

尝试直接使用文件名访问该文件。类似的东西localhost:8080/filename.php应该有效。

\n

然而

\n

如果您只是使用 nginx 容器,那么仅凭它就无法执行 php 脚本,因为它只是 nginx,没有任何 fpm。

\n

有两种方法可以解决此问题:

\n
    \n
  1. 如果您想要简单的东西,只需使用php:apache图像并将 php 文件挂载到/var/www/html/容器中即可。该命令看起来像这样:docker run -it --rm -dp 8080:80 --name=nginx -v $(pwd):/var/www/html php:apache
  2. \n
  3. 将该php:fpm映像与 nginx 容器结合使用。稍微复杂一些,因为您还需要 nginx 容器的自定义配置。
  4. \n
\n

一般来说,docker 的处理方式\xe2\x84\xa2 是为每个服务拥有一个容器,因此是一个 fpm 和 nginx 容器。您不会将 fpm 安装到 nginx 容器中。

\n

我建议您研究 docker 容器如何交互以及如何协同工作。

\n