项目结构:
docker-compose 文件:
version: '3'
services:
php_laravel:
image: devilbox/php-fpm:8.2-work
container_name: php_laravel
volumes:
- ./www:/var/www/default/htdocs/
ports:
- 9000
restart: always
nginx_laravel:
image: devilbox/nginx-stable:latest
container_name: nginx_laravel
links:
- php_laravel
environment:
- PHP_FPM_ENABLE=1~
- PHP_FPM_SERVER_ADDR=php_laravel
volumes:
- ./www:/var/www/default/htdocs/
- ./conf/localhost.conf:/etc/httpd/conf.d/localhost.conf
- ./log:/var/log/nginx-stable/
ports:
- 82:80
restart: always
在WWW文件夹中有一个 Laravel 项目,其中包含文件夹app、public、storage .. 等,如何正确实现对主机上的文件夹以及容器中的文件夹(如果需要)的权限,因为我使用php_laravel容器中的artisan,当我创建控制器等时就会出现问题。通过 artisan 从容器中,phpstorm 说它没有权限编辑此文件,storage/framework文件夹和bootstrap/cache文件夹也有问题,谢谢

如果docker-compose.yaml仅在本地使用,请将其添加到应用程序部分
user: "1000:1000"。 1000通常是默认登录用户的UID。在某些情况下可能会有所不同或者,您可以从容器中文件的所有者的用户下进入容器
docker compose exec -u <user> <container> <shell>。用户名ls -la放在容器中项目所在的目录下就可以看到第一种方法更可取,因为它不会损害主机上文件的所有者
还要向 docker-compose 添加一个 ftp 服务器。
例如,docker-pure-ftpd。
我们只需使用脚本注册根文件夹即可。添加连接的用户名和密码。不要忘记转发端口 21。
这些文件可在任何文本编辑器以及任何 FTP 客户端中进行编辑。 Laravel 处理 FTP 文件和处理本地文件一样好。
在主机上设置权限:设置正确的权限和所有者:确保您的 Laravel 项目文件夹具有正确的权限和所有者。通常,这意味着所有者应该是您的用户,组应该是 www-data。
bash sudo chown -R $USER:www-data www sudo find www -type f -exec chmod 664 {} ; sudo find www -type d -exec chmod 775 {} ; sudo chown -R www-data:www-data www/storage sudo chown -R www-data:www-data www/bootstrap/cache
授予 www-data 组创建文件和目录的权限:
设置 Docker 容器:以 www-data 用户身份运行容器:确保 Docker 容器以正确的权限运行。在 docker-compose.yml 文件中,添加 php_laravel 服务的用户:
yaml version: '3' services: php_laravel: image: Devilbox/php-fpm:8.2-work container_name: php_laravel user: '1000:33' # 将 '1000' 替换为您的用户 ID,将 '33' 替换为组 ID www-数据量: - ./www:/var/www/default/htdocs/ 端口: - 9000 重新启动:始终
nginx_laravel:图像:devilbox / nginx-stable:最新容器名称:nginx_laravel链接: - php_laravel环境: - PHP_FPM_ENABLE = 1〜 - PHP_FPM_SERVER_ADDR = php_laravel卷: - ./www:/var/www/default/htdocs/ - ./conf/ localhost.conf:/etc/httpd/conf.d/localhost.conf - ./log:/var/log/nginx-stable/ ports: - 82:80 重新启动:始终
验证服务是否已重新启动并应用了新配置:
使用 Artisan 和 PHPStorm:从容器中使用 Artisan:确保您以 www-data 用户身份运行 artisan 命令:
bash docker exec -u www-data php_laravel php /var/www/default/htdocs/artisan make:controller ExampleController
设置 PHPStorm:确保 PHPStorm 具有处理文件的正确设置。在项目设置中,检查文件夹的写入权限。