切换Git分支后Docker容器内Composer install因Git缺失失败
Docker容器内执行
composer install时Git未找到的问题排查与解决 报错信息
git was not found in your PATH, skipping source download now trying to download from dist In GitDownloader.php line 246: Failed to execute git show-ref --head -d sh: 1: git: not found
问题触发步骤
- 使用
git checkout <branch_name>切换Git分支; - 通过
docker exec -it <container_id> bash进入Docker容器; - 在容器内执行
composer install。
切换分支后容器内无法找到Git可执行文件,导致composer install失败。
docker-compose.yml配置
version: "3.7" networks: app-network: name: app-network volumes: dbdata: driver: local dbdatatesting: driver: local services: composer: image: composer/composer working_dir: /var/www/html volumes: - "${APP_PATH_HOST:-./}:/var/www/html" networks: - app-network database: image: mysql:5.7 container_name: database ports: - ${FORWARD_DB_PORT:-3306}:3306 environment: MYSQL_DATABASE: project MYSQL_USER: homestead MYSQL_PASSWORD: 123456 MYSQL_ROOT_PASSWORD: 123456 SERVICE_NAME: mysql volumes: - dbdata:/var/lib/mysql - .docker/database/entrypoint/:/docker-entrypoint-initdb.d networks: - app-network db: image: mysql:5.7 container_name: database_testing ports: - ${FORWARD_DB_PORT_TESTING:-33071}:33071 environment: MYSQL_DATABASE: project_testing MYSQL_USER: homestead MYSQL_PASSWORD: 123456 MYSQL_ROOT_PASSWORD: 123456 SERVICE_NAME: mysql volumes: - dbdatatesting:/var/lib/mysql networks: - app-network mailhog: image: mailhog/mailhog ports: - "1025:1025" - "8025:8025" networks: - app-network node: image: "node:8" user: "${USER_MAPPING:-node}" working_dir: /var/www/html environment: - NODE_ENV=development volumes: - ${APP_PATH_HOST:-./}:/var/www/html expose: - "8081" nginx: image: nginx:alpine volumes: - ${APP_PATH_HOST:-./}:/var/www/html - .docker/nginx/default:/etc/nginx/conf.d/default.conf - ./localhost.crt:/etc/ssl/certs/localhost.crt - ./localhost.key:/etc/ssl/private/localhost.key ports: - "${HOST_HTTP_PORT:-80}:80" - "443:443" depends_on: - php-fpm networks: - app-network php-fpm: image: registry.gitlab.com/myfolder/testproject/bc-php7.4-debug:latest user: "${USER_MAPPING:-1000:1000}" working_dir: /var/www/html volumes: - ${APP_PATH_HOST:-./}:/var/www/html networks: - app-network depends_on: - database - redis redis: image: redis:5.0.9 container_name: redis ports: - "6379:6379" networks: - app-network
环境详情
- 操作系统:Windows子系统Linux
- Docker版本:20.10.21, build baeda1f
- Docker容器内Composer版本:2.3.5
需求:无需卸载Docker或删除容器,需继续工作。
已尝试的排查方法
- 重启Docker,问题仍存在;
- 尝试安装Git,但容器内仍无法找到Git;
- 使用最新镜像重建Docker容器,问题依旧。
解决建议
1. 直接使用Composer容器执行命令
你的docker-compose.yml已定义composer服务,官方镜像自带Git,无需进入php-fpm容器,直接在宿主机运行:
docker-compose run --rm composer install
2. 在php-fpm容器内临时安装Git
进入容器后,根据镜像系统执行安装命令:
- Debian/Ubuntu系镜像:
apt update && apt install -y git - Alpine系镜像:
apk add --no-cache git
若安装后仍找不到Git,检查PATH环境变量:
echo $PATH
确认Git安装路径(通常为/usr/bin/git)是否在PATH中,若不在则临时添加:
export PATH=$PATH:/usr/bin
3. 强制Composer使用dist下载源
暂时无法安装Git时,可跳过Git操作,直接下载预编译包:
composer install --prefer-dist
4. 永久修改php-fpm镜像
若需长期解决,修改自定义php镜像的Dockerfile,添加Git安装步骤:
- Debian/Ubuntu系:
RUN apt update && apt install -y git && rm -rf /var/lib/apt/lists/* - Alpine系:
RUN apk add --no-cache git
重新构建并推送镜像,后续启动容器将自带Git。
内容的提问来源于stack exchange,提问作者Dev Mil
相关产品推荐
相关产品推荐

