问题描述
在使用 Docker 运行包含 Apache 和 PHP7 的容器时,遇到了问题。他使用了一个名为 nimmis/apache-php7 的 Docker 镜像,并在运行容器时,将本地的 PHP 网站文件夹挂载到了容器的 /var/www/html 目录。然而,他在访问通过挂载的资源时(在 localhost:8080 上),却遇到了 403 错误。他尝试连接到容器并检查了 /var/www/html 目录,发现文件都在那里,但无法读取或使用 ls 命令查看文件夹内的内容。他想知道问题出在哪里,是否漏掉了什么步骤,寻求帮助。
解决方案
请注意以下操作可能会因 Docker 版本或其他因素的不同而有所变化,建议在操作前备份相关数据。
这个问题的原因与 SELinux 的权限设置有关,解决方法是在挂载卷的声明中添加 :Z 标志。下面是具体的解决步骤:
- 使用 :Z 标志重新运行容器
docker run -d -p 8080:80 -v {my_php_app_path}:/var/www/html:Z nimmis/apache-php7
在上面的命令中,{my_php_app_path} 是你本地的 PHP 网站文件夹路径,将其替换为实际的路径。添加了 :Z 标志后,SELinux 将根据策略允许容器访问挂载的目录,解决了无法访问文件的问题。
注意::Z 标志只在启动容器时添加一次,后续的启动命令无需再次添加该标志。
通过上述操作,你应该能够解决容器无法访问挂载在 /var/www/ 下的 PHP 文件的 403 错误。如果问题仍然存在,可以检查 SELinux 的其他相关设置,或者考虑是否有其他权限相关的问题导致了这个错误。
这个解决方案中的操作应该能够解决你遇到的问题,如果还有其他疑问或需要进一步帮助,请随时提出。
正文完