Docker PHP容器授权Composer及Symfony写入项目目录问题
如何授权Docker PHP容器写入项目目录?
你遇到的核心问题是:容器内指定的普通用户(${ID_USER:-1001})没有根目录写入权限,导致Composer默认缓存目录/.composer无法创建;同时项目目录的权限也需要和容器用户匹配才能正常写入。以下是具体解决方案:
1. 调整Composer缓存目录位置
Composer默认缓存路径在根目录下,普通用户无写入权限,需将其转移到已挂载的项目目录内:
修改docker-compose.yml的php服务配置,新增环境变量指定缓存目录,并挂载本地缓存目录到容器:
php: build: context: .docker/php restart: on-failure volumes: - ./:/var/www/server:cached - ./:/var/www/symfony - ./logs/symfony:/var/www/symfony/app/logs - ./.docker/php/php.ini:/usr/local/etc/php/php.ini:ro # 挂载本地composer缓存目录到容器,避免权限问题 - ./composer-cache:/var/www/symfony/.composer depends_on: - mariadb user: "${ID_USER:-1001}:${ID_USER:-1001}" environment: # 指定Composer缓存目录到项目挂载目录内 COMPOSER_HOME: /var/www/symfony/.composer
然后在本地创建缓存目录并设置匹配权限:
mkdir -p ./composer-cache chown -R ${ID_USER:-1001}:${ID_USER:-1001} ./composer-cache
2. 确保项目目录权限与容器用户匹配
本地项目目录的所有者ID必须和容器内指定的用户ID一致,否则容器用户无法写入项目文件:
chown -R ${ID_USER:-1001}:${ID_USER:-1001} ./
3. 验证修复效果
重启容器后重新执行Composer命令:
docker-compose down docker-compose up -d docker-compose exec php composer install
内容的提问来源于stack exchange,提问作者jessy
相关产品推荐
相关产品推荐

