RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1598711
Accepted
Bastard_Ape
Bastard_Ape
Asked:2024-11-03 22:15:35 +0000 UTC2024-11-03 22:15:35 +0000 UTC 2024-11-03 22:15:35 +0000 UTC

如何正确实现对 docker 中和主机上 Laravel 项目文件夹的访问?

  • 772
比赛还有2天就结束了。回答这个问题,可能会获得 +100声望点的奖励。 Bastard_Ape希望引起更多人对这个问题的关注。

项目结构:

项目结构

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文件夹也有问题,谢谢

php
  • 3 3 个回答
  • 76 Views

3 个回答

  • Voted
  1. Best Answer
    abu
    2024-11-07T15:16:33Z2024-11-07T15:16:33Z

    如果docker-compose.yaml仅在本地使用,请将其添加到应用程序部分user: "1000:1000"。 1000通常是默认登录用户的UID。在某些情况下可能会有所不同

    或者,您可以从容器中文件的所有者的用户下进入容器docker compose exec -u <user> <container> <shell>。用户名ls -la放在容器中项目所在的目录下就可以看到

    第一种方法更可取,因为它不会损害主机上文件的所有者

    • 1
  2. DiD
    2024-11-10T23:34:11Z2024-11-10T23:34:11Z

    还要向 docker-compose 添加一个 ftp 服务器。

    例如,docker-pure-ftpd。

    我们只需使用脚本注册根文件夹即可。添加连接的用户名和密码。不要忘记转发端口 21。

    这些文件可在任何文本编辑器以及任何 FTP 客户端中进行编辑。 Laravel 处理 FTP 文件和处理本地文件一样好。

    • 1
  3. Alexandr Ogorodnik
    2024-11-11T02:42:04Z2024-11-11T02:42:04Z
    1. 在主机上设置权限:设置正确的权限和所有者:确保您的 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 组创建文件和目录的权限:

    bash
    sudo chmod -R ug+rwx www/storage
    sudo chmod -R ug+rwx www/bootstrap/cache
    
    1. 设置 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 重新启动:始终

    验证服务是否已重新启动并应用了新配置:

    bash
    docker-compose down
    docker-compose up -d
    
    1. 使用 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 具有处理文件的正确设置。在项目设置中,检查文件夹的写入权限。

    • 1

相关问题

  • mysqli 类的对象无法转换为字符串

  • 您的系统中缺少 ext-http *,您的系统中缺少 ext-mysql_xdevapi *

  • 如何从csv中删除bom?

  • 当我按下 Enter 键时,如何让 PhpStorm 的 Emmet 插件触发,就像 VS Code 一样?

  • 注释在 Symfony5 中不起作用

  • 搜索最近的地理位置点

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5