You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行update-database报错SocketException:未知主机问题求助

问题原因

你在本地Package Manager Console执行update-database时,连接字符串里的Server=db是Docker Compose容器网络内的服务名,本地主机的DNS无法解析这个名称,所以抛出了主机未知的SocketException。而容器内的应用能正常运行,是因为Docker内置DNS服务会在同一个自定义网络(mynetwork)里把服务名db解析为PostgreSQL容器的IP地址,容器之间可正常通信。

解决方案

以下是几种可行的解决办法:

方法1:临时修改连接字符串

将appsettings.json里的连接字符串中Server=db改为Server=localhost(或127.0.0.1),因为PostgreSQL容器已将5432端口映射到本地主机:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost;Port=5432;Username=postgres;Password=23r2323ffsedsEGDS#%23EAF;Database=NaladimBot.Database;"
}

执行完update-database后,再改回Server=db,确保容器内的应用能正常连接数据库。

方法2:使用环境区分配置(推荐)

创建appsettings.Development.json文件,专门用于本地开发环境,配置中使用localhost作为数据库服务器:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost;Port=5432;Username=postgres;Password=23r2323ffsedsEGDS#%23EAF;Database=NaladimBot.Database;"
}

appsettings.json保持原来的Server=db配置,本地开发时会自动加载开发环境配置,容器运行时使用默认配置,无需手动修改连接字符串。

方法3:修改本地hosts文件解析db域名

在本地主机的hosts文件中添加映射,让db指向本地回环地址:

  • Windows:编辑C:\Windows\System32\drivers\etc\hosts,添加一行:127.0.0.1 db
  • Linux/macOS:编辑/etc/hosts,添加一行:127.0.0.1 db

修改后,本地主机就能将db解析为本地地址,直接使用原连接字符串执行update-database即可。

内容的提问来源于stack exchange,提问作者itehnoviking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:35:54