执行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
相关产品推荐
相关产品推荐

