laravel sail 默认不包含 phpmyadmin,需手动在 docker-compose.yml 中添加 phpmyadmin 服务,配置 pma_host=mysql、ports 映射 8080:80 并设置 pma_arbitrary=1,然后执行 sail down -v 和 sail up -d 启动,访问 http://localhost:8080 登录,用户名密码与 .env 中 db_username/db_password 一致,服务器填 mysql。

phpMyAdmin 不在 Laravel Sail 默认服务里
Sail 启动时默认只包含 laravel.test、mysql、redis 等核心服务,phpmyadmin 并未内置。你执行 sail up 后访问 http://localhost 只能看到 Laravel 应用,不会自动暴露 phpMyAdmin —— 它压根没被定义进 docker-compose.yml。
手动添加 phpMyAdmin 服务到 docker-compose.yml
打开项目根目录下的 docker-compose.yml,在 services: 下新增一个 phpmyadmin 块(位置随意,但建议放在 mysql 之后):
phpmyadmin:
image: 'phpmyadmin/phpmyadmin:5'
ports:
- '8080:80'
environment:
PMA_HOST: mysql
PMA_PORT: '3306'
PMA_ARBITRARY: '1'
depends_on:
- mysql
关键点说明:
-
PMA_HOST: mysql必须写成mysql(即 Sail 中 MySQL 容器的服务名),不能写localhost或127.0.0.1 -
ports: - '8080:80'把容器内 80 端口映射到宿主机 8080,避免和 Laravel 的80冲突 -
PMA_ARBITRARY: '1'允许手动输入任意 MySQL 主机(比如连其他测试库),不加这个就只能连mysql服务 - 不用挂载额外 volume,镜像自带 Web 界面和配置
启动并验证 phpMyAdmin 是否可用
改完配置后必须重建容器才能生效:
- 先停掉旧环境:
sail down -v(-v清除卷,防止缓存干扰) - 重新构建并启动:
sail up -d - 等几秒后,浏览器打开
http://localhost:8080
登录时填:
-
用户名:你在.env里设的DB_USERNAME(通常是root) -
密码:对应DB_PASSWORD(若为空,留空提交即可) -
服务器:填mysql(就是PMA_HOST值,不是localhost)
如果提示 “Access denied”,大概率是 PMA_HOST 写错了,或者 mysql 容器还没完全就绪(可 sail ps 看状态)。
常见问题:为什么连不上 MySQL?
phpMyAdmin 容器和 Laravel 应用容器一样,都运行在 Docker 网络内,但它们彼此隔离。容易踩的坑有:
-
mysql服务名大小写敏感,必须全小写;Sail 的docker-compose.yml里它就是mysql:开头 - 别在
.env里改DB_HOST=mysql以外的值——phpMyAdmin 不读这个文件,它只认自己配置里的PMA_HOST - 如果你启用了 MySQL 的
skip-networking或绑定了127.0.0.1,phpMyAdmin 就连不上;Sail 默认 MySQL 配置是允许容器间通信的,一般不用动 - 某些旧版 phpMyAdmin 镜像(如
4.x)对 PHP 8.2+ 支持不稳定,建议固定用phpmyadmin/phpmyadmin:5
端口映射、服务名拼写、容器启动顺序——这三个地方错一个,phpMyAdmin 页面就打不开或登录失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











