Docker Compose YAML配置下PHP扩展安装失败问题排查求助
Docker中PHP扩展安装失效问题排查与解决
核心问题分析
你的配置存在几个关键错误,直接导致PHP扩展无法生效:
1. Docker Compose镜像覆盖问题
apache_test服务中同时指定了build和image: php:7.4-apache,这会让Docker忽略你构建的自定义镜像,直接使用官方的php:7.4-apache镜像运行容器,你在Dockerfile中安装的GD、Zip等扩展自然不会生效。
2. Build上下文路径错误
build.context设置为./Dockerfile是错误的,context需要指向Dockerfile所在的目录(而非文件路径),否则构建过程会失败或无法正确读取文件。
3. 网络配置不一致
database_test和phpmyadmin_test服务指定的网络是mastercard_network,但在networks段定义的网络名称是test_network,这会导致容器间网络不通,phpmyadmin无法连接数据库。
4. PHPMyAdmin主机配置错误
phpmyadmin_test的PMA_HOST设置为database_mastercard,但实际数据库服务名称是database_test,会导致连接失败。
修正后的配置文件
修正版Dockerfile(添加Zip扩展支持)
FROM php:7.4-apache RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libzip-dev \ zip \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd zip \ && apt-get clean && rm -rf /var/lib/apt/lists/*
修正版docker-compose.yml
version: '3' services: apache_test: container_name: apache_test build: context: . dockerfile: Dockerfile # 移除官方镜像指定,使用构建后的自定义镜像 restart: always dns: - 8.8.8.8 - 4.4.4.4 - 122.28.0.0 ports: - "83:80" volumes: - $HOME/projects/test:/www/test/ - ./apache2.conf:/etc/apache2/sites-enabled/vhost.conf - ./php.ini:/usr/local/etc/php/php.ini networks: test_network: ipv4_address: 122.28.1.1 database_test: container_name: database_test image: mysql:5.7 restart: always ports: - "3310:3306" environment: - MYSQL_ROOT_PASSWORD=abc123 networks: test_network: ipv4_address: 122.28.1.2 command: mysqld --max_allowed_packet=256M phpmyadmin_test: image: phpmyadmin/phpmyadmin:4.8.4 restart: always ports: - "8180:80" environment: MYSQL_ROOT_PASSWORD: abc123 PMA_HOST: database_test networks: test_network: ipv4_address: 122.28.1.3 links: - database_test volumes: data: driver: local networks: test_network: ipam: driver: default config: - subnet: 122.28.0.0/16
验证方法
- 重新构建并启动容器:
docker-compose down && docker-compose build --no-cache && docker-compose up -d
- 进入apache容器验证扩展是否生效:
docker exec -it apache_test php -m
查看输出中是否包含gd和zip字样,确认扩展已安装。
内容的提问来源于stack exchange,提问作者Xavier Issac
相关产品推荐
相关产品推荐

