Docker 一键拉起 Laravel 开发环境需理清三件事:服务按职责分容器(web、app、db、redis)、代码通过 volume 挂载实现热更新、.env 配置适配容器网络(如 DB_HOST=db),3 分钟即可启动开发。

直接用 Docker 一键拉起 Laravel 开发环境,核心不是堆配置,而是理清三件事:服务怎么分、代码怎么进、配置怎么通。本地不装 PHP、MySQL、Nginx,所有依赖全在容器里跑,新人 clone 项目后 3 分钟就能写代码。
服务拆分:按职责分容器,不混在一起
一个标准 Laravel 开发环境至少包含四个独立容器:
- web(Nginx):只管 HTTP 请求转发和静态资源服务,不碰 PHP 执行
- app(PHP-FPM):专注运行 Laravel 应用,装好扩展(pdo_mysql、mbstring、xml 等),可加 Xdebug 用于调试
- db(MySQL / PostgreSQL):数据库服务,镜像版本要与生产一致(如 mysql:8.4)
- redis(可选):缓存和队列支持,用 redis:7-alpine 即可
别把 Nginx 和 PHP 塞进同一个镜像——职责不清会导致构建慢、复用难、调试绕。每个容器只做一件事,靠 docker-compose.yml 连起来。
代码挂载:开发时实时生效,不重建镜像
开发阶段代码必须“活”在容器里,改一行 PHP 就能立刻刷新看到效果。关键靠 volume 挂载:
- 在 php 和 nginx 服务中都挂载
./:/var/www/html,确保源码双向同步 - Nginx 配置文件单独挂载,比如
./docker/nginx.conf:/etc/nginx/conf.d/default.conf - 避免使用 COPY 构建时复制代码——那适合生产镜像,不适合开发
挂载后,你在 IDE 改代码,容器内 PHP-FPM 自动感知变化(Laravel 的自动重载机制 + OPcache 关闭即可),无需重启容器。
.env 配置适配容器网络
容器之间靠服务名通信,不是 localhost。这是最容易出错的一步:
- 把
DB_HOST=localhost改成DB_HOST=db(对应 docker-compose 中 db 服务名) - 同理,
REDIS_HOST=redis、MAIL_HOST=mailhog(如果用了 MailHog) - 确认
APP_URL=http://localhost:8000或你实际访问的地址,Nginx 端口映射要匹配(如"8000:80") - 首次启动后,在 app 容器里执行
php artisan config:clear,让新配置生效
一键启动与初始化命令
准备好 compose.yaml 和 .env 后,三步走:
- 执行
docker-compose up -d --build启动全部服务 - 等 MySQL 初始化完成(看日志
mysqld: ready for connections),再安装依赖:docker-compose run --rm app composer install - 生成密钥并迁移数据库:
docker-compose run --rm app php artisan key:generate && php artisan migrate
浏览器打开 http://localhost:8000,看到 Laravel 欢迎页,就说明整个链路通了。


















