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

Docker运行Firestore模拟器时遇到的两类技术问题咨询

关于Docker运行Firestore模拟器的两个问题

我通过Docker容器运行Firestore模拟器,目前遇到两个问题,相关代码如下:

Environment.SetEnvironmentVariable("FIRESTORE_EMULATOR_HOST", "localhost:8080");

var builder = new FirestoreDbBuilder
{
    ProjectId = "default",
    EmulatorDetection = EmulatorDetection.EmulatorOrProduction
};
var firestoreDb = builder.Build();
    
var col = firestoreDb.Collection("Cities");
var docRef = col.Document("YVR");
var result = await docRef.SetAsync(new City { Name = "Vancouver", Population = 675_000 });
var doc = await docRef.GetSnapshotAsync();
doc.Exists.Dump();

var document = firestoreDb.Collection("Cities").Document("YVR");
var snapshot = await document.GetSnapshotAsync();
snapshot.Exists.Dump();
var city = snapshot.ConvertTo<City>();
city.Dump();

City类定义如下:

[FirestoreData]
public class City
{
    [FirestoreDocumentId]
    public string Id { get; set; }

    [FirestoreProperty]
    public string Name { get; set; } = null!;

    [FirestoreProperty]
    public int Population { get; set; }
}

问题1

未指定ProjectId时,会抛出ArgumentNullException异常,提示“Value cannot be null. (Parameter 'projectId')”。已设置FIRESTORE_EMULATOR_HOST环境变量,为何无法自动适配模拟器?使用模拟器时应设置什么ProjectId值?

解答

  • Firestore模拟器不要求真实GCP项目ID,但客户端SDK的FirestoreDbBuilder强制要求传入ProjectId参数,和是否连接模拟器无关。FIRESTORE_EMULATOR_HOST仅负责告诉SDK将请求路由到模拟器,不会自动填充项目ID。
  • 模拟器对项目ID没有严格校验,任意字符串都可以使用(比如代码里的default,或者test-project这类自定义值),只要代码中的项目ID和模拟器UI中选择的项目ID一致即可。

问题2

指定ProjectId后代码可正常运行,但在默认模拟器UI地址http://127.0.0.1:4000/firestore/data中无法看到添加的文档。

解答

  • 检查Docker端口映射:Firestore模拟器默认用8080端口,UI用4000端口,确保Docker运行命令包含-p 8080:8080 -p 4000:4000,将容器端口映射到本地。
  • 核对项目ID一致性:打开模拟器UI后,左上角有项目选择下拉框,必须选择和代码中完全相同的项目ID(比如你用的default)才能查看对应数据。
  • 验证请求是否到达模拟器:查看Docker容器日志,确认是否接收到文档写入的请求;也可以在代码中添加日志输出,确认操作执行成功。
  • 刷新或重启:若上述都没问题,尝试刷新模拟器UI页面,或者重启模拟器和应用程序,缓存可能导致数据无法实时显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:57:51