【问题标题】:How can I solve 403:Forbidden whilst using a docker container?如何在使用 docker 容器时解决 403:Forbidden 问题?
【发布时间】:2018-05-24 15:26:41
【问题描述】:

我是 Docker 新手,目前正在学习本教程:

Learn Docker in 12 minutes

我创建了必要的文件,并将其设置为显示“Hello World!”在 localhost:80 上。

除此之外,我尝试使用对我的文件夹的直接引用来挂载容器,以便可以更新 index.php 文件以模仿开发环境,然后出现此错误:

我所做的只是改变图像的运行方式,这样我就可以更新 index.php 文件的内容,并在我按下 F5 时看到这些更改反映在网页中。

目前在 Windows 10 Pro 上使用 Docker for Windows

Docker for Windows 正在运行

我一丝不苟地遵循每一步,所以我不会被自己愚弄,而且它似乎对我不起作用。

为了回答 Mornor 的问题,这里是 docker ps

的结果

这里是docker logs [container-name]

既然我现在更好地了解幕后发生的事情,我该如何解决日志中说明的问题?

这是我的Dockfile

以及我为运行图像而执行的命令:

docker run -p 80:80 -v /wmi/tutorials/docker/src/:/var/www/html/ hello-world

所以你看到文件存在:

【问题讨论】:

  • 您能否发出docker psdocker logs [container_name] 来检查这里是否有问题?
  • 你在dockerfile中暴露了80端口吗?
  • @mulg0r 是的,我做了,我把我的 Dockerfile 的屏幕截图放在我刚刚做的编辑中。
  • @Mornor 刚刚编辑,因此可以从日志中看到结果。这绝对是映射,我不知道如何解决这个问题。 :(
  • 会不会像您在映射中缺少驱动器号 c: 一样简单? docker run -p 80:80 -v c:/wmi/tutorials/docker/src/:/var/www/html/hello-world

标签: docker portforwarding docker-for-windows


【解决方案1】:

错误来自 Apache,它试图向您显示目录内容,因为没有可用的索引文件。您的 docker 映射无法正常工作,或者您的 apache 上没有安装 php 支持。您正在访问http://localhost,请尝试http://localhost/index.php

如果您遇到同样的错误,则问题出在映射上。如果您获得 php 代码,则问题在于 Apache 中缺少 PHP 支持。

【讨论】:

  • 我刚刚尝试过,我遇到了 404:找不到文件。 docker logs 命令显示我的 index.php 文件未映射或未在我的编辑中说明。
  • 请参阅@Mornor 的回答中的 cmets。你是对的,这是关于映射的,因为文件 index.php 不存在。但是,另一方面,在我寻找要设置以实现此目的的共享驱动器的任何地方都没有提到它。此外,Docker for Windows Shared Drive 功能将无法使用 AzureAD,令我惊讶的是,恕我直言,它可能被证明是有用的。
【解决方案2】:

我认为您错误地将您的 index.php.您可以做些什么来调试它,首先检查index.php 是否确实安装在容器中。
您可以发出以下命令:

docker run -p 80:80 -v /wmi/tutorials/docker/src/:/var/www/html/ hello-world bash -c 'ls -lsh /var/www/html/'

(如果不起作用,请使用sh 而不是bash)。如果您确实可以看到index.php,那么恭喜您的文件已正确挂载,并且错误不是来自 Docker,而是来自 Apache。

如果index.php 不存在,那么您必须检查您的 Dockerfile。你挂载src/,检查/src是否和你的Dockerfile在同一个目录下。

让我们更新:)

【讨论】:

  • @AnttiA 给出了部分答案。在将C: 放在我的主机路径前以进行共享时,Docker for Windows 提示我是否想与我的容器共享我的驱动器。当我说是时,它需要我提供的凭据。然后,因为我使用的是 AzureAD,Docker 只是什么都不做,驱动器不共享,导致挂载失败。经过进一步研究,这是 Docker 社区已知的 Docker 缺陷,并已在 GitHub 上报告。解决方法是创建一个本地帐户并使其成为本地计算机的管理员,然后使用此用户共享驱动器。
  • 接受了答案,因为即使 Antti A 的答案显示了一种方法,这个方法也提供了一种更技术性的 Docker 相关解决方案来确定文件是否存在。如果我能接受两者,我会的。每个人都提供了非常连贯的想法,最终导致了 Docker 的问题。
【解决方案3】:

我知道答案很晚,但答案很简单: 这发生在使用 docker 并且您拥有 SELinux 时,请注意主机不了解容器 SELinux 策略。 通过添加 z

docker run -p 80:80 -v /wmi/tutorials/docker/src/:/var/www/html/:z hello-world

这将自动执行您需要执行的chcon ....

【讨论】:

    【解决方案4】:

    检查html文件夹是否有正确的权限。 谢谢

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 1970-01-01
      • 2019-10-26
      • 2021-05-03
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 2022-10-09
      相关资源
      最近更新 更多