You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:48:19