【发布时间】:2021-04-22 08:40:51
【问题描述】:
我刚刚学习 Docker 并承担了一个小宠物项目,想知道是否可以使用 docker/nginx/php 进行许可。我正在尝试将我的旧 IIS-Windows/php/MySql 项目转换为 Docker/nginx/php/mysql
我大部分时间都在那里,并且链接了 3 个容器并且一切都运行良好,除了这个系统有一个文件上传/查看/删除组件。我希望将“文件”存储在根 html 文件夹之外,在这种情况下是“/usr/share/nginx/html”。
我的 Linux 机器有一个 120 GB 的 ssd,我的 os 和 docker 解决方案就在其中。我也有一个 ~9 TB RAID(4 个 3TB 驱动器 mdadm raid 5)安装到系统上,这就是我想存储文件夹“文件”并允许我的 docker 解决方案从PHP 网页界面。我似乎无法让它工作。
我已将这些卷映射添加到我的 docker-compose:
volume:
- ./code:/usr/share/nginx/html
- /mnt/md0/files:/usr/share/nginx/html/files
其中“代码”当然是我的 php 代码,它似乎可以在文件夹结构中可见的“文件”文件夹中工作,但我无法写入它,php 权限被拒绝错误。我跑了:
docker exec -it [myNginxContainer] chown -Rf www-data.www-data /usr/share/nginx/html/files
这确实将我在 raid 中的文件夹的实际所有权更改为该文件夹,但仍无法从 php.ini 写入它。 (如果我将实际的“文件”文件夹放在代码目录中:/usr/share/nginx/html/ 并删除 docker-compose 中的卷映射,那么这样做确实可以按我的意愿工作,但我希望它在 raid 上)
我什至尝试将文件夹权限设置为全开:
chmod 777 /mnt/md0/files/
只是看看这是否有帮助,但它没有。毕竟,raid 上该文件夹的权限如下所示:
drwxrwxrwx 2 www-data www-data 4096 Jan 17 23:41 files
好像应该是可写的吧?
在我再把头发扯掉之前,这样的事情可能吗?在某些时候,我什至可能希望该“文件”位置成为一个已挂载的网络位置,但现在至少是一个“external-to-my-html”文件夹位置。
【问题讨论】:
-
你可以通过 www-data 或 root 用户从 docker 容器中手动写入吗?
-
另外,您主机上的文件夹的权限是什么以及您从哪个用户运行您的容器?
-
我能够以 root 身份从容器内写入“files”文件夹,这是我所知道的容器中唯一可用的用户。 exec -it /bin/bash 以 root 身份将您放入该容器中,我可以从该 root 提示符将文件“触摸”到该目录中。主机上文件夹的权限在原始帖子中 - www-data 用户作为所有者(nginx 网络用户),写入权限完全开放。我从我的常规用户帐户运行容器。
-
您能否展示您的 Dockerfile 以及您在正常运行时如何调用它?
-
感谢@TerrySposato 的帮助我想通了。我没有将卷添加到我的 php docker 服务以及我的 nginx 服务中。之后,一切都按照我在我的问题中提出的那样进行。