将Composer容器的vendor目录挂载至另一主机服务器容器
解决Composer容器挂载目录为空的问题
关键原因
Composer的install命令依赖已存在的composer.json文件来安装依赖并生成vendor目录。如果宿主机挂载目录/volume1/docker/devserver/external-includes本身是空的,容器执行install不会自动生成composer.json,自然不会有任何文件输出到挂载目录。
分步解决方案
1. 先在宿主机挂载目录准备composer.json
直接在宿主机的目标目录创建或上传composer.json文件。如果是新项目,可手动创建基础结构:
{ "require": { // 示例:添加你需要的依赖 "phpmailer/phpmailer": "^6.9" } }
或者通过Composer容器初始化项目:
docker run --rm -v /volume1/docker/devserver/external-includes:/app composer init --name="your/project-name" --require="phpmailer/phpmailer:^6.9" --no-interaction
2. 验证Composer容器的执行权限
你配置了PUID=1029和GUID=100,需确保宿主机挂载目录的所有者匹配,否则容器无读写权限:
- 检查目录权限:
ls -ld /volume1/docker/devserver/external-includes
- 修正权限(如果不匹配):
chown 1029:100 /volume1/docker/devserver/external-includes
3. 查看容器日志排查错误
执行以下命令查看Composer容器的运行日志,确认是否有报错(如找不到composer.json、权限不足等):
docker logs composer
4. 确认开发服务器容器的挂载配置
确保开发服务器容器的volumes配置和Composer容器一致,共享同一个宿主机目录:
services: dev-server: # 你的开发服务器镜像配置 volumes: - /volume1/docker/devserver/external-includes:/app
5. 重新运行Composer容器
完成上述步骤后,重新启动Composer容器执行安装:
docker-compose up -d composer
内容的提问来源于stack exchange,提问作者PHP Addict
相关产品推荐
相关产品推荐

