在 macOS 中用 Docker 搭建本地 PHP 多版本环境,核心是通过 DNMP 项目启动隔离的 PHP 容器(如 5.6、7.2、7.4、8.0),由 Nginx 基于域名路由请求;配置 hosts 和 vhost 即可实现 legacy.test→php56、modern.test→php72;各容器可独立安装扩展、修改 php.ini、启用 Xdebug;日常使用 docker-compose 统一管理启停、调试与日志。
在 macos 中用 docker 搭建本地 php 多版本环境,核心是让不同项目各自运行在隔离的容器里,互不干扰。不是装多个 php 到系统,而是为每个版本启动独立服务,再通过 nginx 统一路由和域名分发请求。
选一套开箱即用的方案起步
别从零写 docker-compose 或反复拉镜像。推荐直接使用 DNMP(Docker + Nginx + MySQL + PHP + Redis) 这类成熟项目,比如 Gitee 上的 bruce_qiq/dnmp:
- 已预置 PHP 5.6、7.2、7.4、8.0 等多个官方镜像,每个版本单独一个容器
- 所有服务通过 Docker Compose 管理,一键启停
- Nginx 默认支持虚拟主机(vhost),只需配几个 conf 文件就能按域名路由
- 代码挂载到
www/下对应子目录,比如www/legacy/跑 PHP 5.6,www/modern/跑 PHP 7.2
配置域名与 Nginx 路由
不需要浏览器插件或端口代理,纯靠 hosts + vhost 就能实现干净访问:
- 在
/etc/hosts中添加两行:127.0.0.1 legacy.test127.0.0.1 modern.test - 在 DNMP 的
services/nginx/conf/vhost/下新建两个配置文件:
•legacy.test.conf中fastcgi_pass php56:9000
•modern.test.conf中fastcgi_pass php72:9000 - 执行
docker-compose exec nginx nginx -s reload重载配置
扩展与调试按需定制
每个 PHP 容器彼此独立,扩展、ini 设置、Xdebug 都只影响当前版本:
- 进 PHP 5.6 容器安装 Redis 扩展:
docker-compose exec php56 sh -c "pecl install redis && docker-php-ext-enable redis" - 修改某版本的
php.ini:编辑对应容器的挂载配置目录(如services/php56/conf/php.ini),改完重启该服务即可 - 调试时启用 Xdebug:在对应 PHP 容器的 ini 文件中开启,并把 IDE 配置为监听宿主机 IP(非 127.0.0.1,而是
host.docker.internal)
日常操作建议
用好 docker-compose 命令,避免手动管理容器:
立即学习“PHP免费学习笔记(深入)”;
- 全部启动:
docker-compose up -d - 只启 PHP 5.6 和 Nginx:
docker-compose up -d php56 nginx - 查看运行状态:
docker-compose ps - 进某个容器调试:
docker-compose exec php72 sh - 日志实时查看:
docker-compose logs -f php56



















