Bitbucket Pipeline中Laravel连接MySQL出现php_network_getaddresses错误
解决Bitbucket Pipelines中Laravel与MySQL容器的连接错误
我来帮你分析一下问题所在,以及具体的解决步骤:
问题根源
在Bitbucket Pipelines的多容器架构里,你的php:7.2-fpm-stretch容器和mysql:5.7容器是两个独立的实例,它们通过内部网络通信。你之前用127.0.0.1作为数据库主机,在php容器里这个地址指向的是容器自身,而不是MySQL容器。另外你的.env配置里还有个明显的错误:DB_CONNECTION被设成了IP地址,这个字段应该是指定数据库驱动(比如mysql),而不是主机地址。
具体解决方案
1. 修正.env文件的数据库配置
把你的.env文件改成下面这样:
DB_CONNECTION=mysql DB_HOST=mysql DB_DATABASE=pipeline DB_USERNAME=username DB_PASSWORD=password
DB_CONNECTION:必须设为mysql,这是Laravel识别MySQL驱动的标识,不能填IP;DB_HOST:在Pipelines的内部网络中,MySQL服务的容器可以直接通过服务名mysql访问,这个名称会被自动解析到MySQL容器的内部IP。
2. 在Pipeline脚本中确保配置生效
如果你的项目是通过.env.example生成.env的,建议在脚本里添加自动替换配置的命令,避免手动修改可能出现的疏漏:
# 先复制示例配置文件(如果还没生成.env) cp .env.example .env # 自动替换数据库配置项 sed -i 's/DB_CONNECTION=.*/DB_CONNECTION=mysql/' .env sed -i 's/DB_HOST=.*/DB_HOST=mysql/' .env sed -i 's/DB_DATABASE=.*/DB_DATABASE=pipeline/' .env sed -i 's/DB_USERNAME=.*/DB_USERNAME=username/' .env sed -i 's/DB_PASSWORD=.*/DB_PASSWORD=password/' .env
3. 验证容器间连接
你可以在脚本里加一行测试命令,确认php容器能正常访问MySQL:
mysql -h mysql -u username -ppassword -e "SHOW DATABASES;"
这里用mysql作为主机名,就能正确连接到MySQL服务容器了。
完成以上修改后,再执行composer install和php artisan package:discover,数据库连接错误应该就能解决了。
内容的提问来源于stack exchange,提问作者Hossein Shahsahebi
相关产品推荐
相关产品推荐

