
一个容器化的Firebase模拟器设置,能够在容器关闭时实际导出现有数据,并在容器再次启动时重新导入数据*。
我们创建此镜像的原因是 https://hub.docker.com/r/spine3/firebase-emulator 无法导出和恢复模拟器状态,且未提供可配置的Dockerfile。
*为使此导出/导入功能正常工作,需要使用卷 - 详见下文"数据持久化"部分。
docker-compose.yml文件中,将您的Firebase项目ID作为环境变量FB_PROJECT_ID输入docker-compose up以启动模拟器(此配置包含用于导出和导入数据的卷定义 - 详见"数据持久化"部分了解其含义)您可以使用普通的docker命令,如下所示:
(重要:您需要通过环境变量FB_PROJECT_ID指定您的Firebase项目ID)
shdocker run -d \ --name firebase-emulator \ -e FB_PROJECT_ID=[您的项目ID] \ evolutecx/firebase-emulator:latest
从版本0.0.3开始,预构建镜像默认支持linux/amd64、linux/arm64、linux/ppc64le和linux/s390x。在发布此版本时,基于最新的node-18-alpine镜像,我们只能构建这些架构的版本。
0.0.2及之前版本仅支持linux/amd64(在Apple Silicon芯片上运行时性能较差)- 从0.0.2到0.0.3的变更仅为多架构构建,无其他变化,因此升级到0.0.3是安全的。
容器创建过程中会自动使用正确的架构。
如果您需要支持更多架构,请在https://github.com/evolute-cx/firebase-emulator-docker%E4%B8%8A%E5%91%8A%E7%9F%A5%E6%88%91%E4%BB%AC%E3%80%82%E6%82%A8%E4%B9%9F%E5%8F%AF%E4%BB%A5%E4%B8%BA%E6%9B%B4%E5%A4%9A%E6%9E%B6%E6%9E%84%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E9%95%9C%E5%83%8F%E3%80%82
模拟器将通过以下地址可用:
默认情况下,模拟器公开以下端口:
要更改主机上的端口,只需在docker或docker-compose命令中指定,如下所示:
shdocker run -d \ --name firebase-emulator \ -p 18080:8080 \ -p 14000:4000 \ -p 19099:9099 \ -p 15001:5001 \ -p 19000:9000 \ -p 19199:9199 \ -e FB_PROJECT_ID=[您的项目ID] \ evolutecx/firebase-emulator:latest
或使用docker-compose:
yamlservices: firebase-emulator: image: evolutecx/firebase-emulator:latest ports: - 18080:8080 #Firestore - 14000:4000 #模拟器UI - 19099:9099 #Firebase身份验证 - 19199:9199 #Firebase云存储 - 19000:9000 #Firebase实时数据库 environment: - FB_PROJECT_ID=[您的项目ID]
在此示例中,我们将主机上的端口***映射到容器的8080端口(其他端口类似)。
容器配置为在关闭时将所有数据导出到/firebase/data/export,并在启动时从该位置重新导入数据。
为了在多次运行之间持久化数据,需要使用卷。
重要提示:卷应挂载到容器中的/firebase/data,不要显式挂载到/firebase/data/export,否则模拟器会报错Export failed: dest already exists。
定义一个命名卷,指向容器中的/firebase/data文件夹。
shdocker run -d \ --name firebase-emulator \ -v ./firebase_data:/firebase/data \ -e FB_PROJECT_ID=[您的项目ID] \ evolutecx/firebase-emulator:latest
确保在docker-compose文件中为服务定义卷部分,如下所示:
yamlservices: firebase-emulator: container_name: firebase-emulator image: evolutecx/firebase-emulator:latest restart: always ports: - 4000:4000 #模拟器UI - 9099:9099 #Firebase身份验证 - 8080:8080 #Firestore - 9199:9199 #Firebase云存储 - 9000:9000 #Firebase实时数据库 environment: - FB_PROJECT_ID=[您的项目ID] volumes: - ./firebase-data:/firebase/data:rw # <- 这会在关闭时将数据存储到主机上的./firebase-data/data/export
从版本0.0.3开始,预构建镜像默认支持linux/amd64、linux/arm64、linux/ppc64le和linux/s390x。在发布此版本时,基于最新的node-18-alpine镜像,我们只能构建这些架构的版本。
您可以尝试构建新版本的镜像并推送到Docker Hub:
docker buildx build --platform linux/amd64,linux/arm64,[您想要支持的其他架构] -t [用户名]/[镜像]:[版本] .
更多信息请参见:[***]
欢迎fork仓库并向我们的仓库创建合并请求。您也可以创建issue,我们会进行查看。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 版本下载页面。




探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务