如何使用Lando将同级CMS文件夹挂载到Webroot并配置代理(不移动Lando配置文件)
解决方案:挂载同级CMS目录到Lando服务
你的核心问题在于Lando默认只会将**存放.lando.yml的项目根目录(也就是project-1)**挂载到容器的/app路径下,所以容器内无法直接访问宿主机上同级的cms文件夹。用cp命令失败也是因为这个原因——容器里根本找不到../cms这个路径。
要在不移动Lando配置文件的前提下实现需求,最佳方式是通过Lando的volumes配置,将宿主机上的cms文件夹直接挂载到cms服务的容器内部,然后调整该服务的webroot指向挂载后的路径。
修改后的完整Lando配置
name: project-1 recipe: lamp config: webroot: . proxy: site: project-1-site.lndo.site cms: project-1-cms.lndo.site services: webserver: type: php:7.3 via: apache:2.4 ssl: true database: type: mariadb:10.1.47 pma: type: phpmyadmin hosts: - database site: type: php:7.3 via: apache:2.4 ssl: true webroot: /public build_as_root: - a2enmod headers cms: type: php:7.3 via: apache:2.4 ssl: true # 挂载宿主机同级的cms文件夹到容器内的/app/cms路径 volumes: - ../cms:/app/cms # 将webroot指向容器内挂载后的cms目录 webroot: /app/cms build_as_root: - a2enmod headers
关键修改点说明
- 修正Proxy格式:你原配置中
proxy部分的写法有误,每个代理项应该是服务名: 域名的格式,我去掉了多余的破折号。 - 添加Volumes挂载:在
cms服务中新增volumes配置,../cms是宿主机上相对于project-1目录的路径(也就是同级的cms文件夹),: /app/cms是容器内的目标挂载路径,这样容器就能直接访问cms的所有文件。 - 调整Webroot路径:将
cms服务的webroot改为容器内的挂载路径/app/cms,确保Apache能正确识别CMS的根目录。
额外注意事项
- 确保宿主机上的
../cms路径正确,且Lando有足够的权限读取该文件夹(如果遇到权限问题,可以尝试在cms服务中添加user: root临时测试,或者调整宿主机文件夹的权限)。 - 如果你的CMS需要特定的PHP扩展,可以在
cms服务中添加build或build_as_root命令来安装,比如docker-php-ext-install mysqli。
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

