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

Docker部署旧Laravel项目:Composer报错使用未指定PHP版本

问题

为运行旧版Laravel项目搭建了Docker环境,相关配置如下:

Dockerfile内容

FROM php:7.2-fpm-alpine

WORKDIR /var/www/html

RUN docker-php-ext-install pdo pdo_mysql

docker-compose.yml内容

version: '3'

networks:
  laravel:

services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - mysql
    networks:
      - laravel

  mysql:
    image: mysql:5.7.22
    container_name: mysql
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: homestead
      MYSQL_USER: homestead
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: secret
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    networks:
      - laravel

  php:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php
    volumes:
      - ./src:/var/www/html
    ports:
      - "9000:9000"
    networks:
      - laravel

  composer:
    image: composer:latest
    container_name: composer
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    depends_on:
      - php
    networks:
      - laravel

  npm:
    image: node:13.7
    container_name: npm
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    entrypoint: ['npm']

  artisan:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: artisan
    volumes:
      - ./src:/var/www/html
    depends_on:
      - mysql
    working_dir: /var/www/html
    entrypoint: ['/var/www/html/artisan']
    networks:
      - laravel

执行命令 docker-compose run --rm composer update 时出现报错:

Problem 1
    - phpunit/phpunit[6.0.0, ..., 6.5.14] require php ^7.0 -> your php version (8.2.10) does not satisfy that requirement.
    - Root composer.json requires phpunit/phpunit ~6.0 -> satisfiable by phpunit/phpunit[6.0.0, ..., 6.5.14]

但执行 docker-compose run php --version 显示PHP版本为7.2.34:

PHP 7.2.34 (fpm-fcgi) (built: Dec 17 2020 10:32:58)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

疑问:为何Composer会报错使用PHP8.2.10版本,如何解决?

原因分析

composer服务使用的是composer:latest镜像,该镜像默认内置PHP8.x版本(当前为8.2.10),和项目依赖的PHP7.2版本不匹配。你测试的php服务基于自己构建的PHP7.2镜像,版本显示正常,但Composer运行在独立容器中,使用的是自身镜像的PHP版本,因此出现版本兼容报错。

解决方法

方法一:使用匹配项目PHP版本的Composer镜像

修改docker-compose.yml中的composer服务,指定适配PHP7.2的Composer镜像:

composer:
  image: composer:2.5.8-php7.2  # 选择与PHP7.2兼容的Composer版本标签
  container_name: composer
  volumes:
    - ./src:/var/www/html
  working_dir: /var/www/html
  depends_on:
    - php
  networks:
    - laravel

方法二:在自定义PHP镜像中安装Composer

修改Dockerfile,在PHP7.2镜像内直接安装Composer,确保Composer使用当前容器的PHP版本:

FROM php:7.2-fpm-alpine

WORKDIR /var/www/html

# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN docker-php-ext-install pdo pdo_mysql

然后修改docker-compose.yml的composer服务,使用自定义构建的PHP镜像:

composer:
  build:
    context: .
    dockerfile: Dockerfile
  container_name: composer
  volumes:
    - ./src:/var/www/html
  working_dir: /var/www/html
  entrypoint: ['composer']
  depends_on:
    - php
  networks:
    - laravel

执行命令重新构建镜像并运行Composer:

docker-compose build composer
docker-compose run --rm composer update

内容的提问来源于stack exchange,提问作者nikulas13

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:30:55