如何让Docker Compose编排的多容器使用相同PHP版本
官方的codeception/codeception镜像默认内置PHP7.4,所以才会出现版本不匹配的问题,以下两个方案都可以解决需求:
方案1:复用现有PHP容器运行Codeception(推荐)
不需要额外维护容器,完全保证PHP版本和依赖一致,资源占用最低。
- 在你的PHP容器Dockerfile(路径
./dockerfiles/php)中增加Codeception安装命令:
# 新增以下内容到原有php Dockerfile末尾 RUN curl -Ls https://codeception.com/codecept.phar -o /usr/local/bin/codecept && chmod +x /usr/local/bin/codecept
- 重新构建php容器:
docker-compose up -d --build php - 后续执行测试直接在php容器中运行命令即可:
docker exec php codecept run
你可以选择直接删除原docker-compose.yml中的codecept服务,不需要单独部署codecept容器。
方案2:自定义Codeception容器匹配PHP8版本
如果需要保留单独的Codeception服务,按以下步骤修改:
- 替换docker-compose.yml中的codecept服务配置:
codecept: build: context: ./ dockerfile: ./dockerfiles/codecept container_name: codeception depends_on: - web volumes: - ./html:/project networks: - my-network entrypoint: ["codecept"]
- 新建
./dockerfiles/codecept文件,写入以下内容:
# 基础镜像使用和你php服务完全一致的PHP版本 FROM php:8.0.10-cli # 安装依赖扩展,可根据你的项目需求增减 RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ zip \ unzip \ && docker-php-ext-install pdo_mysql mbstring bcmath # 安装Composer(如果你的测试依赖Composer包) COPY --from=composer:2 /usr/bin/composer /usr/bin/composer # 安装最新版Codeception RUN curl -Ls https://codeception.com/codecept.phar -o /usr/local/bin/codecept && chmod +x /usr/local/bin/codecept WORKDIR /project
- 重新构建启动服务:
docker-compose up -d --build codecept
不建议跨容器调用PHP运行环境,这种实现需要挂载Docker套接字或者配置SSH互通,配置复杂且有安全风险,优先使用上面两个方案。
内容的提问来源于stack exchange,提问作者PhilipCodeX
相关产品推荐
相关产品推荐

