基于 Linux 的模拟器(预览版)

下一代 Azure Cosmos DB 模拟器完全基于 Linux,且可用作 Docker 容器。 它支持在各种处理器和操作系统上运行。

重要

此版本的模拟器仅支持网关模式下的 NoSQL API,并且具有选择的功能子集。 有关详细信息,请参阅功能支持

先决条件

安装

使用 docker pull 获取 Docker 容器映像。 该容器映像将作为 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview 发布到 Microsoft 工件注册表

docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview

正在运行

若要运行容器,请使用 docker run。 之后,使用 docker ps 来验证容器是否正常运行。

docker run --detach --publish 8081:8081 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview

docker ps
CONTAINER ID   IMAGE                                                             COMMAND                  CREATED         STATUS         PORTS                                                                                  NAMES
c1bb8cf53f8a   mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview  "/bin/bash -c /home/…"   5 seconds ago   Up 5 seconds   0.0.0.0:1234->1234/tcp, :::1234->1234/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   <container-name>

注意

该模拟器由两个部分组成:

  • 数据资源管理器 - 在模拟器中以交互方式浏览数据。 默认情况下,此部分在 1234 端口上运行
  • Azure Cosmos DB 模拟器 - Azure Cosmos DB 数据库服务的本地版本。 默认情况下,此部分在 8081 端口上运行。

模拟器网关终结点通常在地址 http://localhost:8081 的端口 8081 上。 若要导航到数据资源管理器,请在 Web 浏览器中使用地址 http://localhost:1234。 数据资源管理器可能需要等待几秒钟才能可用。 网关终结点则通常立即可用。

重要

.NET 和 Java SDK 在模拟器中不支持 HTTP 模式。 由于此版本的模拟器默认以 HTTP 开头,因此在启动容器时需要显式启用 HTTPS(见下文)。 对于 Java SDK,还需要安装证书

docker run --detach --publish 8081:8081 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview --protocol https

Docker 命令

下表总结了可用于配置模拟器的 Docker 命令。 此表详细列出了每个命令的相应参数、环境变量、允许的值、默认设置和说明。

要求 Arg Env 允许的值 默认值 说明
将设置从容器打印到 stdout --help-h 空值 不可用 空值 显示有关可用配置的信息
设置 Cosmos 终结点的端口 --port [INT] PORT INT 8081 容器上的 Cosmos 终结点的端口。 你仍需要发布此端口(例如 -p 8081:8081)。
指定 Cosmos 终结点使用的协议 --protocol PROTOCOL httpshttphttps-insecure http 容器上的 Cosmos 终结点的协议。
启用数据资源管理器 --enable-explorer ENABLE_EXPLORER truefalse true 启用在同一容器上运行 Cosmos 数据资源管理器的功能。
设置数据资源管理器使用的端口 --explorer-port EXPLORER_PORT INT 1234 容器上的 Cosmos 数据资源管理器的端口。 你仍需要发布此端口(例如 -p 1234:1234)。
用户应能够指定资源管理器使用的协议,否则默认为 Cosmos 终结点正在使用的协议 --explorer-protocol EXPLORER_PROTOCOL httpshttphttps-insecure <the value of --protocol> 容器上的 Cosmos 数据资源管理器的协议。 默认为 Cosmos 终结点上的协议设置。
通过文件指定密钥 --key-file [PATH] KEY_FILE PATH <default secret> 使用文件中指定的密钥替代默认密钥。 你需要将此文件装载到容器中(例如,如果 KEY_FILE=/mykey,则需要将如下所示的选项添加到 Docker 运行:--mount type=bind,source=./myKey,target=/myKey
设置数据路径 --data-path [PATH] DATA_PATH PATH /data 指定数据的目录。 经常与 docker run --mount 选项一起使用(例如,如果 DATA_PATH=/usr/cosmos/data,则可将如下所示的选项添加到 Docker 运行:--mount type=bind,source=./.local/data,target=/usr/cosmos/data
指定要用于 https 的证书路径 --cert-path [PATH] CERT_PATH PATH <default cert> 指定用于保护流量的证书的路径。 你需要将此文件装载到容器中(例如,如果 CERT_PATH=/mycert.pfx,则需要将如下所示的选项添加到 Docker 运行:--mount type=bind,source=./mycert.pfx,target=/mycert.pfx
指定要用于 https 的证书机密 空值 CERT_SECRET string <default secret> 在 CERT_PATH 上指定的证书的机密。
设置日志级别 --log-level [LEVEL] LOG_LEVEL quieterrorwarninfodebugtrace info 模拟器和数据资源管理器发出的日志的详细程度。
启用发送到 Microsoft 的诊断信息 --enable-telemetry ENABLE_TELEMETRY truefalse true 启用将日志发送到 Microsoft 的功能,以帮助我们改进模拟器。

功能支持

此模拟器处于积极开发阶段,现为预览版。 因此,并非所有 Azure Cosmos DB 功能都受支持。 而且,某些功能将来也无法获得支持。 下表包括各种功能的状态及其支持级别。

功能 支持
Batch API ✅ 受支持
批量 API ✅ 受支持
更改源 ⚠️ 尚未实现
使用 utf 数据创建和读取文档 ✅ 受支持
创建集合 ✅ 受支持
创建集合两次冲突 ✅ 受支持
使用自定义索引策略创建集合 ⚠️ 尚未实现
创建具有 ttl 过期的集合 ⚠️ 尚未实现
创建数据库 ✅ 受支持
创建数据库两次冲突 ✅ 受支持
创建文档 ✅ 受支持
创建分区集合 ⚠️ 尚未实现
删除集合 ✅ 受支持
删除数据库 ✅ 受支持
删除文档 ✅ 受支持
获取和更改集合性能 ⚠️ 尚未实现
插入大型文档 ✅ 受支持
修补文档 ⚠️ 尚未实现
并行查询已分区集合 ⚠️ 尚未实现
使用聚合进行查询 ⚠️ 尚未实现
使用 AND 筛选条件进行查询 ⚠️ 尚未实现
使用 AND 筛选条件和投影进行查询 ⚠️ 尚未实现
使用相等条件进行查询 ✅ 受支持
使用 ID 相等条件进行查询 ✅ 受支持
使用联接进行查询 ⚠️ 尚未实现
使用排序条件进行查询 ✅ 受支持
使用排序条件针对已分区集合进行查询 ⚠️ 尚未实现
使用按数字排序的条件进行查询 ✅ 受支持
使用按字符串排序的条件进行查询 ⚠️ 尚未实现
使用分页进行查询 ⚠️ 尚未实现
使用日期时间范围运算符进行查询 ⚠️ 尚未实现
使用数字范围运算符进行查询 ⚠️ 尚未实现
使用字符串范围运算符进行查询 ⚠️ 尚未实现
使用单个联接进行查询 ⚠️ 尚未实现
使用字符串、数学和数组运算符进行查询 ⚠️ 尚未实现
使用子文档进行查询 ⚠️ 尚未实现
使用两个联接进行查询 ⚠️ 尚未实现
使用两个联接和筛选条件进行查询 ⚠️ 尚未实现
读取集合 ✅ 受支持
读取集合源 ⚠️ 尚未实现
读取数据库 ✅ 受支持
读取数据库源 ⚠️ 尚未实现
读取文档 ✅ 受支持
读取文档源 ✅ 受支持
替换文档 ✅ 受支持
请求单位 ⚠️ 尚未实现
存储过程 ❌ 未规划
触发器 ❌ 未规划
UDF ❌ 未规划
更新集合 ⚠️ 尚未实现
更新文档 ✅ 受支持

限制

除了尚不支持或未规划的功能外,以下列表还包括模拟器的当前限制。

  • 适用于 Azure Cosmos DB 的 .NET SDK 不支持在模拟器中进行批量执行。
  • .NET 和 Java SDK 在模拟器中不支持 HTTP 模式。

安装用于 Java SDK 的证书

在 HTTPS 模式下将适用于 Azure Cosmos DB 的 Java SDK 与此版本的模拟器配合使用时,必须将其证书安装到本地 Java 信任存储。

获取证书

bash 窗口中,运行以下命令:

# If the emulator was started with /AllowNetworkAccess, replace localhost with the actual IP address of it:
EMULATOR_HOST=localhost
EMULATOR_PORT=8081
EMULATOR_CERT_PATH=/tmp/cosmos_emulator.cert
openssl s_client -connect ${EMULATOR_HOST}:${EMULATOR_PORT} </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $EMULATOR_CERT_PATH

安装证书

导航到 cacerts 文件所在的 Java 安装目录(将下面的目录替换为正确的目录):

cd "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot/bin"

导入证书(系统可能会要求输入密码,默认值为“changeit”):

keytool -cacerts -importcert -alias cosmos_emulator -file $EMULATOR_CERT_PATH

如果由于别名已存在而出现错误,请将其删除,然后再次运行上述命令:

keytool -cacerts -delete -alias cosmos_emulator

报告问题

如果在使用此版本的模拟器时遇到问题,请在 GitHub 存储库 (https://github.com/Azure/azure-cosmos-db-emulator-docker) 中开启一个问题,并使用标签 cosmosEmulatorVnextPreview 对其进行标记。