Docker环境下EF Core执行remove-migration报11001未知主机错误如何解决
问题原因
add-migration仅扫描本地代码结构生成迁移文件,不需要建立真实数据库连接,所以哪怕你的数据库主机地址只能在Docker内部网络解析也能正常执行。remove-migration会默认尝试连接数据库,查询__EFMigrationsHistory系统表确认待删除的迁移是否已经被应用到数据库,而你本地开发环境无法解析Docker内部的PostgreSQL服务主机名,就会抛出No such host is known的DNS解析错误。
解决方案
方案1:临时修改连接字符串
把你项目配置中的数据库连接字符串的Host值改为localhost,同时确保你的PostgreSQL Docker容器已经将5432端口映射到本地主机对应端口,修改完成后再执行remove-migration即可,操作完成后再把连接字符串改回原配置。
方案2:加--force参数强制删除
如果你明确要删除的迁移尚未被应用到数据库,可以直接执行以下命令跳过数据库校验步骤,直接删除本地迁移文件:
remove-migration --force
注意:该操作不会校验迁移的应用状态,如果删除已应用的迁移会导致后续数据库更新逻辑异常,请确认后再操作。
方案3:在Docker容器内执行命令
进入你的API服务对应的Docker容器内部执行remove-migration命令,容器和PostgreSQL服务处于同一Docker网络下,可以正常解析内部服务主机名,操作前需要确保容器内已经安装了dotnet ef工具。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

