修改Laravel Sail数据库配置失败:端口已被占用如何解决
报错原因
Laravel Sail默认会将容器内MySQL的3306端口直接映射到宿主机的3306端口,当宿主机3306端口已经被其他数据库服务或容器占用时,就会触发端口分配失败的报错。
解决方法
优先使用环境变量配置的方式修改,无需改动Docker核心配置:
- 打开项目根目录的
.env配置文件,新增或修改FORWARD_DB_PORT参数,指定一个未被占用的本地端口,比如常用的3307:
FORWARD_DB_PORT=3307
注意:不要修改同文件内的
DB_PORT参数,该参数是Laravel容器内部连接MySQL使用的端口,容器内MySQL始终监听3306,保持默认值3306即可,修改后会导致容器内服务连接数据库失败。
- 终止之前启动异常的Sail进程,重新加载配置启动容器:
./vendor/bin/sail down ./vendor/bin/sail up -d
如果你之前已经执行过./vendor/bin/sail artisan sail:publish发布过Sail的Docker配置文件,也可以直接修改项目根目录下的docker-compose.yml文件:
- 找到
mysql服务节点下的ports配置段,将端口映射的宿主机部分修改为自定义可用端口:
mysql: image: 'mysql/mysql-server:8.0' ports: - '${FORWARD_DB_PORT:-3307}:3306'
- 修改完成后同样执行
sail down和sail up命令重启容器即可生效。
验证
启动完成后,本地宿主机上的数据库客户端连接Sail内置MySQL时,使用你配置的自定义端口(比如3307)即可正常连接,不会再触发端口占用报错。
内容的提问来源于stack exchange,提问作者Nelb
相关产品推荐
相关产品推荐

