
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
一个容器化的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,我们会进行查看。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。





来自真实用户的反馈,见证轩辕镜像的优质服务