选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

AWS IoT Greengrass 在 Docker 容器中运行 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS IoT Greengrass 在 Docker 容器中运行

AWS IoT Greengrass 可以配置为在 Docker 容器中运行。

您可以通过亚马逊下载安装了 AWS IoT Greengrass 核心软件和依赖项 CloudFront的 Dockerfile。要修改 Docker 镜像以便在不同平台架构上运行或减少 Docker 镜像的大小,请参阅 Docker 程序包下载中的 README 文件。

为了帮助您开始试验 AWS IoT Greengrass, AWS 还提供了安装了 C AWS IoT Greengrass ore 软件和依赖项的预构建 Docker 镜像。您可以从 Docker HubAmazon Elastic Container Registry (Amazon ECR) 下载映像。这些预先构建的映像使用亚马逊 Linux 2 (x86_64) 和 Alpine Linux(x86_64、armv7L 或)基础映像。 AArch64

重要

2022 年 6 月 30 日,我 AWS IoT Greengrass 结束了对发布到亚马逊弹性容器注册表 (Amazon ECR) 和 Docker Hub 的 AWS IoT Greengrass 核心软件 v1.x Docker 镜像的维护。您可以继续从 Amazon ECR 和 Docker Hub 下载这些 Docker 映像,直至 2023 年 6 月 30(即维护结束 1 年后)为止。但是,在 2022 年 6 月 30 日维护结束后, AWS IoT Greengrass 核心软件 v1.x Docker 镜像不再收到安全补丁或错误修复。如果您运行的生产工作负载依赖于这些 Docker 镜像,我们建议您使用提供的 Dockerfiles 构建自己的 Docker 镜像。 AWS IoT Greengrass 有关更多信息,请参阅 AWS IoT Greengrass Docker 软件

本主题介绍如何从亚马逊 ECR 下载 AWS IoT Greengrass Docker 镜像并在 Windows、macOS 或 Linux (x86_64) 平台上运行该镜像。本主题包含以下步骤:

在 Docker 容器 AWS IoT Greengrass 中运行时,不支持以下功能:

  • Greengrass 容器模式下运行的连接器。要在 Docker 容器中运行连接器,该连接器必须在无容器模式下运行。要查找支持无容器模式的连接器,请参阅AWS提供的 Greengrass 连接器。其中一些连接器具有隔离模式参数,您必须将此参数设为无容器

  • 本地设备和卷资源。在 Docker 容器中运行的用户定义 Lambda 函数必须直接访问核心上的设备和卷。

当 Greengrass 组的 Lambda 运行时环境设置为 “无容器”(在 Docker 容器中运行是必需的)时,不支持这些功能。 AWS IoT Greengrass

先决条件

在开始本教程之前,必须执行以下操作。

  • 您必须根据所选的 AWS Command Line Interface (AWS CLI) 版本在主机上安装以下软件和版本。

    AWS CLI version 2
    • Docker 版本 18.09 或更高版本。早期版本也可能有效,但我们建议使用 18.09 或更高版本。

    • AWS CLI 版本 2.0.0 或更高版本。

      注意

      要在 Windows 计算机上升级到更高 AWS CLI 版本 2,必须重复 MSI 安装过程。

    AWS CLI version 1
    • Docker 版本 18.09 或更高版本。早期版本也可能有效,但我们建议使用 18.09 或更高版本。

    • Python 版本 3.6 或更高版本。

    • pip 版本 18.1 或更高版本。

    • AWS CLI 版本 1.17.10 或更高版本

      • 要安装 AWS CLI 版本 1,请参阅安装 AWS CLI 版本 1

      • 要配置 AWS CLI,请参阅配置 AWS CLI

      • 要升级到版本 1 的最新 AWS CLI 版本,请运行以下命令。

        pip install awscli --upgrade --user
      注意

      如果你在 Windows 上使用 MSI 安装 AWS CLI 版本 1,请注意以下几点:

      • 如果 AWS CLI 版本 1 安装无法安装 botocore,请尝试使用 Pyth on 和 pip 安装。

      • 要升级到更高 AWS CLI 版本 1,必须重复 MSI 安装过程。

    • Docker 版本 18.09 或更高版本。早期版本也可能有效,但我们建议使用 18.09 或更高版本。

    • AWS CLI 版本 2.0.0 或更高版本。

      注意

      要在 Windows 计算机上升级到更高 AWS CLI 版本 2,必须重复 MSI 安装过程。

  • 要访问 Amazon Elastic Container Registry (Amazon ECR) 资源,您必须授予以下权限。

    • Amazon ECR 要求用户通过 AWS Identity and Access Management (IAM) 策略授予ecr:GetAuthorizationToken权限,然后才能向注册表进行身份验证以及从 Amazon ECR 存储库推送或拉取映像。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的 Amazon ECR 存储库策略示例访问一个 Amazon ECR 存储库

第 1 步:从 Amazon ECR 获取 AWS IoT Greengrass 容器镜像

AWS 提供安装了 AWS IoT Greengrass 核心软件的 Docker 镜像。

警告

从 AWS IoT Greengrass 核心软件的 v1.11.6 开始,Greengrass Docker 镜像不再包含 Python 2.7,因为 Python 2.7 已于 2020 年推出,不再接收安全更新。 end-of-life如果您选择更新这些 Docker 映像,我们建议您在将更新部署到生产设备之前,先验证应用程序是否可以使用新的 Docker 映像。如果使用 Greengrass Docker 映像的应用程序需要 Python 2.7,您可以修改 Greengrass Dockerfile,为您的应用程序包含 Python 2.7。

有关演示如何从 Amazon ECR 拉取 latest 映像的步骤,请选择您的操作系统:

在计算机终端中运行以下命令。

  1. 在 Amazon ECR 中登录 AWS IoT Greengrass 注册表。

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com

    如果成功,输出将打印 Login Succeeded

  2. 检索 AWS IoT Greengrass 容器镜像。

    docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
    注意

    latest镜像包含安装在 Amazon Linux 2 基础映像上的 AWS IoT Greengrass 核心软件的最新稳定版本。您还可以从存储库中拉取其他版本。要查找所有可用映像的标签,请查看 Docker Hub 上的 标签页面或使用 aws ecr list-images 命令。例如:

    aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
  3. 启用符号链接和硬链接保护。如果您正在尝试在容器 AWS IoT Greengrass 中运行,则只能启用当前启动的设置。

    注意

    您可能需要使用 sudo 才能运行这些命令。

    • 要仅启用当前引导的设置,请执行以下操作:

      echo 1 > /proc/sys/fs/protected_hardlinks echo 1 > /proc/sys/fs/protected_symlinks
    • 要使设置在重新启动后保持不变,请执行以下操作:

      echo '# AWS IoT Greengrass' >> /etc/sysctl.conf echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf sysctl -p
  4. 启用 IPv4 网络转发,这是在 Linux 上 AWS IoT Greengrass 运行云部署和 MQTT 通信所必需的。在 /etc/sysctl.conf 文件中,将 net.ipv4.ip_forward 设置为 1,然后重新加载 sysctls

    sudo nano /etc/sysctl.conf # set this net.ipv4.ip_forward = 1 sudo sysctl -p
    注意

    您可以使用您选择的编辑器而不是 nano。

在计算机终端中运行以下命令。

  1. 在 Amazon ECR 中登录 AWS IoT Greengrass 注册表。

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com

    如果成功,输出将打印 Login Succeeded

  2. 检索 AWS IoT Greengrass 容器镜像。

    docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
    注意

    latest镜像包含安装在 Amazon Linux 2 基础映像上的 AWS IoT Greengrass 核心软件的最新稳定版本。您还可以从存储库中拉取其他版本。要查找所有可用映像的标签,请查看 Docker Hub 上的 标签页面或使用 aws ecr list-images 命令。例如:

    aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
  3. 启用符号链接和硬链接保护。如果您正在尝试在容器 AWS IoT Greengrass 中运行,则只能启用当前启动的设置。

    注意

    您可能需要使用 sudo 才能运行这些命令。

    • 要仅启用当前引导的设置,请执行以下操作:

      echo 1 > /proc/sys/fs/protected_hardlinks echo 1 > /proc/sys/fs/protected_symlinks
    • 要使设置在重新启动后保持不变,请执行以下操作:

      echo '# AWS IoT Greengrass' >> /etc/sysctl.conf echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf sysctl -p
  4. 启用 IPv4 网络转发,这是在 Linux 上 AWS IoT Greengrass 运行云部署和 MQTT 通信所必需的。在 /etc/sysctl.conf 文件中,将 net.ipv4.ip_forward 设置为 1,然后重新加载 sysctls

    sudo nano /etc/sysctl.conf # set this net.ipv4.ip_forward = 1 sudo sysctl -p
    注意

    您可以使用您选择的编辑器而不是 nano。

在计算机终端中运行以下命令。

  1. 在 Amazon ECR 中登录 AWS IoT Greengrass 注册表。

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com

    如果成功,输出将打印 Login Succeeded

  2. 检索 AWS IoT Greengrass 容器镜像。

    docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
    注意

    latest镜像包含安装在 Amazon Linux 2 基础映像上的 AWS IoT Greengrass 核心软件的最新稳定版本。您还可以从存储库中拉取其他版本。要查找所有可用映像的标签,请查看 Docker Hub 上的 标签页面或使用 aws ecr list-images 命令。例如:

    aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass

在计算机终端中运行以下命令。

  1. 在 Amazon ECR 中登录 AWS IoT Greengrass 注册表。

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com

    如果成功,输出将打印 Login Succeeded

  2. 检索 AWS IoT Greengrass 容器镜像。

    docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
    注意

    latest镜像包含安装在 Amazon Linux 2 基础映像上的 AWS IoT Greengrass 核心软件的最新稳定版本。您还可以从存储库中拉取其他版本。要查找所有可用映像的标签,请查看 Docker Hub 上的 标签页面或使用 aws ecr list-images 命令。例如:

    aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass

在命令提示符中运行以下命令。Docker 桌面必须先处于运行状态,然后您才能在 Windows 上使用 Docker 命令。

  1. 在 Amazon ECR 中登录 AWS IoT Greengrass 注册表。

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com

    如果成功,输出将打印 Login Succeeded

  2. 检索 AWS IoT Greengrass 容器镜像。

    docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
    注意

    latest镜像包含安装在 Amazon Linux 2 基础映像上的 AWS IoT Greengrass 核心软件的最新稳定版本。您还可以从存储库中拉取其他版本。要查找所有可用映像的标签,请查看 Docker Hub 上的 标签页面或使用 aws ecr list-images 命令。例如:

    aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass

在命令提示符中运行以下命令。Docker 桌面必须先处于运行状态,然后您才能在 Windows 上使用 Docker 命令。

  1. 在 Amazon ECR 中登录 AWS IoT Greengrass 注册表。

    aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com

    如果成功,输出将打印 Login Succeeded

  2. 检索 AWS IoT Greengrass 容器镜像。

    docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
    注意

    latest镜像包含安装在 Amazon Linux 2 基础映像上的 AWS IoT Greengrass 核心软件的最新稳定版本。您还可以从存储库中拉取其他版本。要查找所有可用映像的标签,请查看 Docker Hub 上的 标签页面或使用 aws ecr list-images 命令。例如:

    aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass

步骤 2:创建和配置 Greengrass 组和核心

Docker 镜像安装了 AWS IoT Greengrass 核心软件,但你必须创建 Greengrass 组和内核。这包括下载证书和核心配置文件。

步骤 3: AWS IoT Greengrass 在本地运行

配置您的组后,便能配置和启动核心。有关演示如何执行此操作的步骤,请选择您的操作系统:

在计算机终端中运行以下命令。

  1. 为设备的安全资源创建一个文件夹,然后将证书和密钥移入该文件夹中。运行以下命令。path-to-security-files替换为安全资源的路径,并certificateId替换为文件名中的证书 ID。

    mkdir /tmp/certs mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs mv path-to-security-files/certificateId-public.pem.key /tmp/certs mv path-to-security-files/certificateId-private.pem.key /tmp/certs mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
  2. 为设备配置创建一个文件夹,然后将 AWS IoT Greengrass Core 配置文件移至该文件夹。运行以下命令。path-to-config-file替换为配置文件的路径。

    mkdir /tmp/config mv path-to-config-file/config.json /tmp/config
  3. 在 Docker 容器中启动 AWS IoT Greengrass 并绑定挂载证书和配置文件。

    /tmp 替换为您解压证书和配置文件的路径。

    docker run --rm --init -it --name aws-iot-greengrass \ --entrypoint /greengrass-entrypoint.sh \ -v /tmp/certs:/greengrass/certs \ -v /tmp/config:/greengrass/config \ -p 8883:8883 \ 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

    输出应类似于此示例:

    Setting up greengrass daemon Validating hardlink/softlink protection Waiting for up to 30s for Daemon to start Greengrass successfully started with PID: 10

在计算机终端中运行以下命令。

  1. 为设备的安全资源创建一个文件夹,然后将证书和密钥移入该文件夹中。运行以下命令。path-to-security-files替换为安全资源的路径,并certificateId替换为文件名中的证书 ID。

    mkdir /tmp/certs mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs mv path-to-security-files/certificateId-public.pem.key /tmp/certs mv path-to-security-files/certificateId-private.pem.key /tmp/certs mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
  2. 为设备配置创建一个文件夹,然后将 AWS IoT Greengrass Core 配置文件移至该文件夹。运行以下命令。path-to-config-file替换为配置文件的路径。

    mkdir /tmp/config mv path-to-config-file/config.json /tmp/config
  3. 在 Docker 容器中启动 AWS IoT Greengrass 并绑定挂载证书和配置文件。

    /tmp 替换为您解压证书和配置文件的路径。

    docker run --rm --init -it --name aws-iot-greengrass \ --entrypoint /greengrass-entrypoint.sh \ -v /tmp/certs:/greengrass/certs \ -v /tmp/config:/greengrass/config \ -p 8883:8883 \ 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

    输出应类似于此示例:

    Setting up greengrass daemon Validating hardlink/softlink protection Waiting for up to 30s for Daemon to start Greengrass successfully started with PID: 10

在计算机终端中运行以下命令。

  1. 为设备的安全资源创建一个文件夹,然后将证书和密钥移入该文件夹中。运行以下命令。path-to-security-files替换为安全资源的路径,并certificateId替换为文件名中的证书 ID。

    mkdir /tmp/certs mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs mv path-to-security-files/certificateId-public.pem.key /tmp/certs mv path-to-security-files/certificateId-private.pem.key /tmp/certs mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
  2. 为设备配置创建一个文件夹,然后将 AWS IoT Greengrass Core 配置文件移至该文件夹。运行以下命令。path-to-config-file替换为配置文件的路径。

    mkdir /tmp/config mv path-to-config-file/config.json /tmp/config
  3. 在 Docker 容器中启动 AWS IoT Greengrass 并绑定挂载证书和配置文件。

    /tmp 替换为您解压证书和配置文件的路径。

    docker run --rm --init -it --name aws-iot-greengrass \ --entrypoint /greengrass-entrypoint.sh \ -v /tmp/certs:/greengrass/certs \ -v /tmp/config:/greengrass/config \ -p 8883:8883 \ 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

    输出应类似于此示例:

    Setting up greengrass daemon Validating hardlink/softlink protection Waiting for up to 30s for Daemon to start Greengrass successfully started with PID: 10

在计算机终端中运行以下命令。

  1. 为设备的安全资源创建一个文件夹,然后将证书和密钥移入该文件夹中。运行以下命令。path-to-security-files替换为安全资源的路径,并certificateId替换为文件名中的证书 ID。

    mkdir /tmp/certs mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs mv path-to-security-files/certificateId-public.pem.key /tmp/certs mv path-to-security-files/certificateId-private.pem.key /tmp/certs mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
  2. 为设备配置创建一个文件夹,然后将 AWS IoT Greengrass Core 配置文件移至该文件夹。运行以下命令。path-to-config-file替换为配置文件的路径。

    mkdir /tmp/config mv path-to-config-file/config.json /tmp/config
  3. 在 Docker 容器中启动 AWS IoT Greengrass 并绑定挂载证书和配置文件。

    /tmp 替换为您解压证书和配置文件的路径。

    docker run --rm --init -it --name aws-iot-greengrass \ --entrypoint /greengrass-entrypoint.sh \ -v /tmp/certs:/greengrass/certs \ -v /tmp/config:/greengrass/config \ -p 8883:8883 \ 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

    输出应类似于此示例:

    Setting up greengrass daemon Validating hardlink/softlink protection Waiting for up to 30s for Daemon to start Greengrass successfully started with PID: 10
  1. 为设备的安全资源创建一个文件夹,然后将证书和密钥移入该文件夹中。在命令提示符中运行以下命令。path-to-security-files替换为安全资源的路径,并certificateId替换为文件名中的证书 ID。

    mkdir C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
  2. 为设备配置创建一个文件夹,然后将 AWS IoT Greengrass Core 配置文件移至该文件夹。在命令提示符中运行以下命令。path-to-config-file替换为配置文件的路径。

    mkdir C:\Users\%USERNAME%\Downloads\config move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
  3. 在 Docker 容器中启动 AWS IoT Greengrass 并绑定挂载证书和配置文件。在命令提示符处运行以下命令。

    docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

    当 Docker 提示您与 Docker 守护程序共享 C:\ 驱动器时,允许它在 Docker 容器内绑定挂载 C:\ 目录。有关更多信息,请参阅 Docker 文档中的共享驱动器

    输出应类似于此示例:

    Setting up greengrass daemon Validating hardlink/softlink protection Waiting for up to 30s for Daemon to start Greengrass successfully started with PID: 10

  1. 为设备的安全资源创建一个文件夹,然后将证书和密钥移入该文件夹中。在命令提示符中运行以下命令。path-to-security-files替换为安全资源的路径,并certificateId替换为文件名中的证书 ID。

    mkdir C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
  2. 为设备配置创建一个文件夹,然后将 AWS IoT Greengrass Core 配置文件移至该文件夹。在命令提示符中运行以下命令。path-to-config-file替换为配置文件的路径。

    mkdir C:\Users\%USERNAME%\Downloads\config move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
  3. 在 Docker 容器中启动 AWS IoT Greengrass 并绑定挂载证书和配置文件。在命令提示符处运行以下命令。

    docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

    当 Docker 提示您与 Docker 守护程序共享 C:\ 驱动器时,允许它在 Docker 容器内绑定挂载 C:\ 目录。有关更多信息,请参阅 Docker 文档中的共享驱动器

    输出应类似于此示例:

    Setting up greengrass daemon Validating hardlink/softlink protection Waiting for up to 30s for Daemon to start Greengrass successfully started with PID: 10
注意

如果容器不打开 shell 并立即退出,则可以在启动映像时通过绑定挂载 Greengrass 运行时日志来调试问题。有关更多信息,请参阅 在 Docker 容器之外保留 Greengrass 运行时日志

步骤 4:为 Greengrass 组配置“No container (无容器)”容器化

在 Docker 容器 AWS IoT Greengrass 中运行时,所有 Lambda 函数都必须在不进行容器化的情况下运行。在此步骤中,将组的默认容器化设置为 No container (无容器)。在首次部署组之前,您必须执行此操作。

  1. 在 AWS IoT 控制台导航窗格的管理下,展开 Greengrass 设备,然后选择群组 (V1)。

  2. 选择要更改其设置的组。

  3. 选择 Lambda 函数选项卡。

  4. 默认 Lambda 函数运行时环境下,选择编辑

  5. 编辑默认 Lambda 函数运行时环境中,更改 Lambda 函数容器化下的容器化设置。

  6. 选择保存

这些更改将在部署组时生效。

有关更多信息,请参阅 在组中设置 Lambda 函数的默认容器化

注意

默认情况下,Lambda 函数使用组容器化设置。当 AWS IoT Greengrass 在 Docker 容器中运行时,如果您覆盖任何 Lambda 函数的无容器设置,则部署将失败。

第 5 步:将 Lambda 函数部署到 Docker 容器 AWS IoT Greengrass

您可以将长期存在的 Lambda 函数部署到 Greengrass Docker 容器。

步骤 6:(可选)部署与 Docker 容器中运行的 Greengrass 交互的客户端设备

您还可以部署在 Docker 容器中运行 AWS IoT Greengrass 时与之交互的客户端设备。

停止 AWS IoT Greengrass Docker 容器

要停止 AWS IoT Greengrass Docker 容器,请在终端或命令提示符下按 Ctrl+C。此操作将向 Greengrass 守护程序进程发送 SIGTERM 以停用 Greengrass 守护程序进程及其启动的所有 Lambda 进程。Docker 容器通过 /dev/init 进程初始化为 PID 1,这有助于删除任何剩余的僵尸进程。有关更多信息,请参阅 Docker 运行参考

在 Docker AWS IoT Greengrass 容器中进行故障排除

使用以下信息来帮助解决在 Docker 容器 AWS IoT Greengrass 中运行的问题。

错误:无法从非 TTY 设备执行交互式登录。

解决方案:运行 aws ecr get-login-password 命令时,可能会出现此错误。确保您已安装最新的 AWS CLI 版本 2 或版本 1。我们建议您使用 AWS CLI 版本 2。有关更多信息,请参阅AWS Command Line Interface 《用户指南》中的安装 AWS CLI

错误:未知选项:-no-include-email。

解决方案:运行 aws ecr get-login 命令时,可能会出现此错误。确保安装了最新 AWS CLI 版本(例如,运行:pip install awscli --upgrade --user)。如果您使用的是 Windows,并且您已使用 MSI 安装程序安装 CLI,则必须重复安装过程。有关更多信息,请参阅AWS Command Line Interface 用户指南中的在 Microsoft Windows 上安装 AWS Command Line Interface

警告: IPv4 已禁用。网络将不起作用。

解决方案:在 Linux 计算机 AWS IoT Greengrass 上运行时,您可能会收到此警告或类似消息。按照本步骤中的说明启用 IPv4 网络转发。 AWS IoT Greengrass 未启用 IPv4 转发功能时,云部署和 MQTT 通信不起作用。有关更多信息,请参阅 Docker 文档中的在运行时配置具有命名空间的内核参数 (sysctls)

错误:防火墙阻止 Windows 和容器之间的文件共享。

解决方案:在 Windows 计算机上运行 Docker 时,您可能会收到此错误或 Firewall Detected 消息。如果您登录虚拟私有网络 (VPN) 并且网络设置阻止挂载共享驱动器,也会出现此错误。在这种情况下,请关闭 VPN 并重新运行 Docker 容器。

错误:调用 GetAuthorizationToken 操作时出现错误 (AccessDeniedException):用户:arn: aws: iam::: user/ <account-id><user-name>无权在资源上执行:ecr:: GetAuthorizationToken

如果您没有足够权限来访问 Amazon ECR 存储库,则运行 aws ecr get-login-password 命令时可能会收到此错误。有关更多信息,请参阅Amazon ECR 用户指南中的 Amazon ECR 存储库策略示例访问 One Amazon ECR 存储库

有关一般 AWS IoT Greengrass 故障排除帮助,请参阅故障排除 AWS IoT Greengrass

AWS IoT Greengrass 在 Docker 容器中进行调试

要调试 Docker 容器的问题,您可以保留 Greengrass 运行时日志或将交互式 shell 附加到 Docker 容器。

在 Docker 容器之外保留 Greengrass 运行时日志

您可以在绑定挂载目录后运行 AWS IoT Greengrass Docker 容器。/greengrass/ggc/var/log即使容器退出或被删除,日志仍然存在。

在 Linux 或 macOS 上

停止任何在主机上运行的 Greengrass Docker 容器,然后在终端中运行以下命令。这会绑定挂载 Greengrass log 目录并启动 Docker 镜像。

/tmp 替换为您解压证书和配置文件的路径。

docker run --rm --init -it --name aws-iot-greengrass \ --entrypoint /greengrass-entrypoint.sh \ -v /tmp/certs:/greengrass/certs \ -v /tmp/config:/greengrass/config \ -v /tmp/log:/greengrass/ggc/var/log \ -p 8883:8883 \ 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

然后,您可以在主机上的 /tmp/log 中检查日志,以查看 Greengrass 在 Docker 容器内运行时发生的情况。

在 Windows 上

停止任何在主机上运行的 Greengrass Docker 容器,然后在命令提示符中运行以下命令。这会绑定挂载 Greengrass log 目录并启动 Docker 镜像。

cd C:\Users\%USERNAME%\Downloads mkdir log docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -v c:/Users/%USERNAME%/Downloads/log:/greengrass/ggc/var/log -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest

然后,您可以在主机上的 C:/Users/%USERNAME%/Downloads/log 中检查日志,以查看 Greengrass 在 Docker 容器内运行时发生的情况。

将交互式 Shell 附加到 Docker 容器

您可以将交互式外壳附加到正在运行的 AWS IoT Greengrass Docker 容器上。这可以帮助您调查 Greengrass Docker 容器的状态。

在 Linux 或 macOS 上

当 Greengrass Docker 容器正在运行时,在单独的终端中运行以下命令。

docker exec -it $(docker ps -a -q -f "name=aws-iot-greengrass") /bin/bash
在 Windows 上

当 Greengrass Docker 容器正在运行时,在单独的命令提示符中运行以下命令。

docker ps -a -q -f "name=aws-iot-greengrass"

gg-container-id替换为上一个命令的container_id结果。

docker exec -it gg-container-id /bin/bash
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。