你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

断开连接(脱机)环境中的容器

对于所有模型以及2023-07-31 (GA)读取、布局、发票、收据和 ID 文档模型,目前都支持2022-08-31 (GA)容器的支持:

✔️ 有关支持的容器文档,请参阅 断开连接环境中的 文档智能 v3.0 容器。

此内容适用于:选中标记v3.0 (GA)选中标记v3.1 (GA)

什么是断开连接的容器?

使用Azure AI 容器,可以灵活地在容器中本地运行某些文档智能服务。 连接的容器在你的环境中本地运行,并将使用信息发送到云进行计费。 断开连接的容器适用于容器运行不需要与云连接的场景。

Azure AI 文档智能容器允许你使用文档智能 API 并享受容器化的优势。 断开连接的容器通过承诺层级定价提供,相较于即用即付定价,服务提供折扣费率。 借助承诺层级定价,可以承诺以固定费用使用文档智能功能,从而根据工作负载的需求预测总成本。

开始使用

尝试在脱机环境中运行 Docker 容器之前,请务必熟悉下列关于成功下载和使用容器的要求:

  • 主计算机要求和建议。
  • 用于下载容器的 Docker pull 命令。
  • 如何验证容器是否正在运行。
  • 如何在容器运行后将查询发送到容器的终结点。

请求在断开连接的环境中使用容器的访问权限

在断开连接的环境中使用文档智能容器之前,必须先填写并提交请求表单,然后购买承诺计划

在 Azure 门户中创建新资源

首先在门户中预配新资源。

  • 确保为“定价层”选择 Commitment tier disconnected containers DC0 选项

  • 从自定义层级、读取层级或预生成承诺层中的至少一个层级中选择适当的定价层

    Azure 门户中断开连接的层级配置的屏幕截图。

容器 最小值 建议 承诺计划
Read 8 个内核,10 GB 内存 8 个内核,24 GB 内存 OCR(读取)
Layout 8 个内核,16 GB 内存 8 个内核,24 GB 内存 预生成
Business Card 8 个内核,16 GB 内存 8 个内核,24 GB 内存 预生成
General Document 8 个内核,12 GB 内存 8 个内核,24 GB 内存 预生成
ID Document 8 个内核,8 GB 内存 8 个内核,24 GB 内存 预生成
Invoice 8 个内核,16 GB 内存 8 个内核,24 GB 内存 预生成
Receipt 8 个内核,11 GB 内存 8 个内核,24 GB 内存 预生成
Custom Template 8 个内核,16 GB 内存 8 个内核,24 GB 内存 自定义 API

收集必需的参数

所有 Azure AI 服务容器都需要三个参数:

  • 最终用户许可协议 (EULA) 的值必须为 accept。
  • Azure 门户中资源的终结点 URL。
  • Azure 门户中资源的 API 密钥。

首次运行容器时需要终结点 URL 和 API 密钥才能对其进行配置,以在断开连接的情况下使用。 你可以在 Azure 门户中资源的“密钥和终结点”页,找到密钥和终结点:

Azure 门户“密钥和终结点”页面的屏幕截图。

重要

你只需使用密钥和终结点将容器配置为在断开连接的环境中运行。 配置容器后,无需使用密钥和终结点值来发送 API 请求。 以安全方式存储密钥(例如,使用 Azure Key Vault 来存储)。 此过程只需要一个密钥。

使用 docker pull 下载 Docker 容器

下载已或准可在断开连接的环境中运行的 Docker 容器。 例如:

Docker pull 命令 格式
• • docker pull [image]

docker pull [image]latest
最新的容器映像。 • • mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0:latest

mcr.microsoft.com/azure-cognitive-services/form-recognizer/invoice-3.0:latest

示例 Docker pull 命令

docker pull mcr.microsoft.com/azure-cognitive-services/form-recognizer/invoice:latest

将容器配置为在断开连接的环境中运行

断开连接的容器映像与连接的容器相同。 主要区别在于断开连接的容器需要许可证文件。 通过在连接模式下启动容器并将 downloadLicense 参数设置为 true 来下载此许可证文件。

现在,你已下载了容器,需要使用以下参数执行 docker run 命令:

  • DownloadLicense=True。 此参数将下载一个许可证文件,该文件将使 Docker 容器能够在未连接到 Internet 时运行。 它还包含到期日期,在此日期之后,许可证文件将失效,无法运行容器。 只能在相应的已批准容器中使用许可证文件。

重要

docker run 命令将生成可用于运行容器的模板。 模板包含下载的模型和配置文件所需的参数。 请务必保存此模板。

以下示例演示将使用的 docker run 命令的格式设置以及占位符值。 将这些占位符值替换为你自己的值。

占位符 Value 格式或示例
{IMAGE} 要使用的容器映像。 mcr.microsoft.com/azure-cognitive-services/form-recognizer/invoice
{LICENSE_MOUNT} 将下载和装载许可证的路径。 /host/license:/path/to/license/directory
{ENDPOINT_URI} 用于对服务请求进行身份验证的终结点。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 https://<your-custom-subdomain>.cognitiveservices.azure.com
{API_KEY} 文档智能资源的密钥。 可以在 Azure 门户中资源的“密钥和终结点”页上找到此项。 {string}
{CONTAINER_LICENSE_DIRECTORY} 容器本地文件系统上的许可证文件夹的位置。 /path/to/license/directory

示例 docker run 命令


docker run --rm -it -p 5000:5050 \

-v {LICENSE_MOUNT} \

{IMAGE} \

eula=accept \

billing={ENDPOINT_URI} \

apikey={API_KEY} \

DownloadLicense=True \

Mounts:License={CONTAINER_LICENSE_DIRECTORY}

在以下命令中,替换文件夹路径、计费终结点和 API 密钥的占位符,以下载布局容器的许可证文件。

docker run -v {folder path}:/license --env Mounts:License=/license --env DownloadLicense=True --env Eula=accept --env Billing={billing endpoint} --env ApiKey={api key} mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0:latest

配置容器后,使用下一部分在你的环境中通过许可证以及相应的内存和 CPU 分配来运行容器。

文档智能容器模型和配置

配置容器后,将会生成下载的文档智能模型和容器配置的值并显示在容器输出中。

在断开连接的环境中运行容器

下载许可证文件后,可以使用许可证、相应的内存和适当的 CPU 分配在断开连接的环境中运行容器。 以下示例显示 docker run 命令的格式设置以及占位符值。 将这些占位符值替换为你自己的值。

无论何时运行容器,都必须将许可证文件装载到容器,并且必须使用 Mounts:License= 指定容器本地文件系统上许可证文件夹的位置。 此外,必须指定输出装载,以便可以写入计费使用情况记录。

占位符 Value 格式或示例
{IMAGE} 要使用的容器映像。 mcr.microsoft.com/azure-cognitive-services/form-recognizer/invoice
{MEMORY_SIZE} 要分配给容器的适当内存大小。 4g
{NUMBER_CPUS} 要分配给容器的适当 CPU 数。 4
{LICENSE_MOUNT} 将放置和装载许可证的路径。 /host/license:/path/to/license/directory
{OUTPUT_PATH} 记录使用情况记录的输出路径。 /host/output:/path/to/output/directory
{CONTAINER_LICENSE_DIRECTORY} 容器本地文件系统上的许可证文件夹的位置。 /path/to/license/directory
{CONTAINER_OUTPUT_DIRECTORY} 容器本地文件系统上的输出文件夹的位置。 /path/to/output/directory

示例 docker run 命令

docker run --rm -it -p 5000:5050 --memory {MEMORY_SIZE} --cpus {NUMBER_CPUS} \

-v {LICENSE_MOUNT} \

-v {OUTPUT_PATH} \

{IMAGE} \

eula=accept \

Mounts:License={CONTAINER_LICENSE_DIRECTORY}

Mounts:Output={CONTAINER_OUTPUT_DIRECTORY}

启动断开连接的容器的方式与启动连接的容器类似。 断开连接的容器需要添加许可证参数。 以下是用于在断开连接模式下启动自定义容器的示例 docker-compose.yml 文件。 添加 CUSTOM_LICENSE_MOUNT_PATH 环境变量(其值设置为包含所下载许可证文件的文件夹)和 OUTPUT_MOUNT_PATH 环境变量(其值集设置为保存使用情况日志的文件夹)。

version: '3.3'
services:
 nginx:
  image: nginx:alpine
  container_name: reverseproxy
  volumes:
    - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf
  ports:
    - "5000:5050"
 layout:
  container_name: azure-cognitive-service-layout
  image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0:latest
  environment:
    eula: accept
    apikey: ${FORM_RECOGNIZER_KEY}
    billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
    Logging:Console:LogLevel:Default: Information
    SharedRootFolder: /shared
    Mounts:Shared: /shared
    Mounts:Output: /logs
    Mounts:License: /license
  volumes:
    - type: bind
      source: ${SHARED_MOUNT_PATH}
      target: /shared
    - type: bind
      source: ${OUTPUT_MOUNT_PATH}
      target: /logs
    - type: bind
      source: ${LAYOUT_LICENSE_MOUNT_PATH}
      target: /license
  expose:
    - "5000"

 custom-template:
  container_name: azure-cognitive-service-custom-template
  image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/custom-template-3.0:latest
  restart: always
  depends_on:
    - layout
  environment:
    AzureCognitiveServiceLayoutHost: http://azure-cognitive-service-layout:5000
    eula: accept
    apikey: ${FORM_RECOGNIZER_KEY}
    billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
    Logging:Console:LogLevel:Default: Information
    SharedRootFolder: /shared
    Mounts:Shared: /shared
    Mounts:Output: /logs
    Mounts:License: /license
  volumes:
    - type: bind
      source: ${SHARED_MOUNT_PATH}
      target: /shared
    - type: bind
      source: ${OUTPUT_MOUNT_PATH}
      target: /logs
    - type: bind
      source: ${CUSTOM_LICENSE_MOUNT_PATH}
      target: /license
  expose:
    - "5000"

 studio:
  container_name: form-recognizer-studio
  image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/studio:3.0
  environment:
    ONPREM_LOCALFILE_BASEPATH: /onprem_folder
    STORAGE_DATABASE_CONNECTION_STRING: /onprem_db/Application.db
  volumes:
    - type: bind
      source: ${FILE_MOUNT_PATH} # path to your local folder
      target: /onprem_folder
    - type: bind
      source: ${DB_MOUNT_PATH} # path to your local folder
      target: /onprem_db
  ports:
    - "5001:5001"
  user: "1000:1000" # echo $(id -u):$(id -g)

其他参数和命令

下面是运行容器所需的其他一些参数和命令。

使用情况记录

在断开连接的环境中运行 Docker 容器时,容器会将使用情况记录写入卷,该卷将随时间推移收集这些记录。 还可以调用 REST API 终结点来生成有关服务使用情况的报表。

用于存储日志的参数

在断开连接的环境中运行时,输出装载必须可供容器存储使用情况日志。 例如,在下面的示例中,你将包括 -v /host/output:{OUTPUT_PATH}Mounts:Output={OUTPUT_PATH},并将 {OUTPUT_PATH} 替换为存储着日志的路径:

docker run -v /host/output:{OUTPUT_PATH} ... <image> ... Mounts:Output={OUTPUT_PATH}

使用容器终结点获取记录

容器提供两个终结点,用于返回有关其使用情况的记录。

获取所有记录

以下终结点将提供一个报告,其中汇总了在装载的计费记录目录中收集的所有使用情况。

https://<service>/records/usage-logs/

示例 HTTPS 终结点

http://localhost:5000/records/usage-logs

使用情况日志终结点将返回如下例所示的 JSON 响应:

{
  "apiType": "string",
  "serviceName": "string",
  "meters": [
    {
      "name": "string",
      "quantity": 256345435
    }
  ]
}

获取特定月份的记录

以下终结点将提供汇总了特定月份和年份使用情况的报告。

https://<service>/records/usage-logs/{MONTH}/{YEAR}

此使用情况日志终结点将返回如下例所示的 JSON 响应:

{
  "apiType": "string",
  "serviceName": "string",
  "meters": [
    {
      "name": "string",
      "quantity": 56097
    }
  ]
}

疑难解答

运行启用了输出装载和日志记录的容器。 这些设置将使容器能够生成有助于排查启动或运行容器时发生的问题的日志文件。

提示

如需更多的故障排除信息和指南,请参阅断开连接的容器常见问题解答 (FAQ)

后续步骤