问题引出

当我们将写好的web项目部署到Docker上之后,却发现无法成功运行,但是在本地测试的时候明明可以成功运行,这是为什么呢?

原来是我的服务器主机地址在开发时直接设置为localhost,在本地运行的时候可以直接通过他来找到数据库地址,但是在Docker里面不能够直接通过识别它来访问到我们的主机数据库,因此就出现了报错。

例如,你的数据库配置文件可能如下图所示

[database]
Db = mysql
DbHost = localhost
DbPort = 3306
DbUser = root
DbPassword = 123456
DbName = new_ginblog

解决方案

在将项目部署到Docker上之前修改 DbHost 的值为 host.docker.internal ,因为这是Docker 提供的一个特殊 DNS 名称,用于在容器内部访问宿主机(运行 Docker 的主机) 的网络服务,无需手动指定宿主机的 IP 地址,简化了本地开发环境中的容器与宿主机通信。

修改后的配置信息

[database]
Db = mysql
DbHost = host.docker.internal
DbPort = 3306
DbUser = root
DbPassword = 123456
DbName = new_ginblog

在这样修改之后就可以在Docker上面正常的运行了。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐