AWS RoboMaker 兼容容器的要求 - AWS RoboMaker

终止支持通知:2025 年 9 月 10 日, AWS 将停止对的支持。 AWS RoboMaker2025 年 9 月 10 日之后,您将无法再访问 AWS RoboMaker 控制台或 AWS RoboMaker 资源。有关过渡 AWS Batch 到以帮助运行容器化仿真的更多信息,请访问此博客文章。

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

AWS RoboMaker 兼容容器的要求

您必须满足一组要求才能运行AWS RoboMaker 兼容容器(容器映像)并成功启动模拟。如果您已满足这些要求,但在运行模拟时仍然遇到问题,请参阅 模拟作业模拟 WorldForge

您的容器映像无法在 Dockerfile 中使用 VOLUME。如果 VOLUME 在 Dockerfile 中,您的模拟失败并显示错误代码 4XX

您的容器映像无法在 Dockerfile 中使用 EXPOSE。如果 EXPOSE 在 Dockerfile 中,AWS RoboMaker 使您的模拟失败,并显示错误代码 4XX

您的容器镜像压缩后的大小必须小于或等于 20 GB。如果您的容器映像压缩后大于 20 GB,则AWS RoboMaker使模拟失败并显示错误代码 4XX

您无法在 Dockerfile 中指定 CMD。如果这样做,则 AWS RoboMaker 会使用软件包名称和启动文件将其覆盖。相反,您可以在 CreateSimulationJob 请求中使用每个模拟应用程序或机器人应用程序中 launchConfigcommand 参数提供启动命令列表。在模拟作业中设置为 CMD。示例 command["/bin/bash", "-c", "sleep 365d"]

如果要向模拟作业添加工具,您必须bash 安装到容器映像中。您的工具通过 ["/bin/bash", "-c", "<command>"] 启动。

如果您的容器运行的是 ROS,并且您需要在机器人应用程序和模拟应用程序之间进行通信,则应设置以下机器人框架:

  • ROS Master

  • Gazebo Master

  • ROS IP

您无法自定义容器中的 /etc/resolv.conf 文件。AWS RoboMaker 用自己的文件覆盖该文件。

如果您正在 AWS 中运行 Dockerfile,则无法挂载映像。如果在 Dockerfile 中指定 Mount,AWS RoboMaker 使您的模拟失败,并显示错误代码 4XX

您的容器映像不能使用被默认 Docker seccomp 配置文件阻止的系统调用。有关被屏蔽系统调用的信息,请参阅 Seccomp 安全配置文件

要指定运行映像的用户,可以在 Dockerfile 中指定 USER 关键字。如果您未指定用户,则 AWS RoboMaker 使用容器中的根用户。

在您的容器映像中,您可以将 USER 指定为名称或 UID:GID。如果您的容器映像没有 UID,则其默认值为 1000

您的容器映像无法在 /opt/amazon/robomaker 或其任何子文件夹中存储数据。AWS RoboMaker 只能使用该目录。如果您使用该目录,您的模拟可能无法正常运行。

不支持以下运行时系统配置。

Docker Run 论点 描述
1 -\-add-host 添加自定义的主机到 IP 映射(主机:ip)
2 -\-attach , -a 连接到 STDIN、STDOUT 或 STDERR
3 -\-blkio-weight Block IO(相对权重),介于 10 和 1000 之间,或者禁用 0(默认为 0)
4 -\-blkio-weight-devi ce Block IO 权重(相对设备权重)
5 -\-cap-add 添加 Linux 功能
6 -\-cap-drop 放弃 Linux 功能
7 -\-cgroup-parent 容器的可选父级 cgroup
8 -\-cgroupns API 1.41+ < https://docs.d ocker.com/engine/api/ v1.41/>__Cgroup 命名空间要使用 (host|private) “主机”:在 Docker 主机的 cgroup 命名空间 “private” 中运行容器:在自己的私有 cgroup 命名空间 中运行容器”:使用进程守护程序上默认 cgroupns-mode 选项配置的 cgroup 命名空间(默认)
9 -\-cidfile 将容器 ID 写入文件
10 -\-cpu-count CPU 计数(仅适用于 Windows)
11 -\-cpu-percent CPU 百分比(仅适用于 Windows)
12 -\-cpu-period 限制 CPU CFS(完全公平的调度程序)周期
13 -\-cpu-quota 限制 CPU CFS(完全公平的调度程序)配额
14 -\-cpu-rt-period API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__以微秒为单位限制 CPU 的实时周期
15 -\-cpu-rt-runtime API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__以微秒为单位限制 CPU 的实时运行时系统
16 -\-cpu-shares , -c CPU 份额(相对权重)
17 -\-cpus API 1.25+< https://docs.d ocker.com/engine/api/ v1.25/> __CPU 的数量
18 -\-cpuset-cpus 允许在其中执行的 CPU (0-3、0、1)
19 -\-cpuset-mems 允许在其中执行的 MEM (0-3、0、1)
20 -\-detach , -d 在后台运行容器并打印容器 ID
21 -\-detach-keys 重写用于分离容器的键序列
22 -\-device 向容器中添加主机设备
23 -\-device-cgroup-rul e 将规则添加到 cgroup 允许的设备列表中
24 -\-device-read-bps 限制设备读取速率(每秒字节数)
25 -\-device-read-iops 限制设备读取速率(每秒 IO)
26 -\-device-write-bps 限制设备写入速率(每秒字节数)
27 -\-device-write-iops 限制设备写入速率(每秒 IO)
28 -\-disable-content-t rust 跳过映像验证
29 -\-dns 自定义 DNS 服务器
30 -\-dns-opt 设置 DNS 选项
31 -\-dns-option 设置 DNS 选项
32 -\-dns-search 设置自定义 DNS 搜索域
33 -\-domainname 容器 NIS 域名
34 -\-gpus 要添加到容器中的 API 1.40+ < https://docs.d ocker.com/engine/api/ v1.40/>__GPU设备(“全部”用于传递所有 GPU)
35 -\-group-add 添加其他要加入的群组
36 -\-health-cmd 用于检查运行状况的命令
37 -\-health-interval 运行检查之间的间隔时间 (msm|h)(默认为 0)
38 -\-health-retries 需要连续出现故障才能报告运行状况不佳
39 -\-health-start-peri od API 1.29+ < https://docs.d ocker.com/engine/api/ v1.29/>__开始运行状况重试倒计时之前容器初始化的开始周期 (msm|h)(默认为 0)
40 -\-health-timeout 允许运行一次检查的最长时间 (msm|h)(默认为 0)
41 -\-help 打印用量
42 -\-hostname , -h 容器主机名
43 -\-init API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__在容器内初始化运行,用于转发信号并获取进程
44 -\-interactive , -i 即使未连接 STDIN 也要保持 STDIN 打开
45 -\-io-maxbandwidth 系统驱动器的最大 IO 带宽限制(仅限 Windows)
46 -\-io-maxiops 系统驱动器的最大 IO 限制(仅限 Windows)
47 -\-ip IPv4 地址(例如,172.30.100.104)
48 -\-ip6 IPv6 地址(例如,2001:db8::33)
49 -\-ipc 要使用的 IPC 模式
50 -\-isolation 容器隔离技术
51 -\-kernel-memory 内核内存限制
52 -\-label , -l 在容器上设置元数据
53 -\-label-file 读入以行分隔的标签文件
54 -\-link 添加指向其他容器的链接
55 -\-link-local-ip 容器 IPv4/IPv6 链路本地地址
56 -\-log-driver 容器的日志驱动程序
57 -\-log-opt 日志驱动程序选项
58 -\-mac-address 容器 MAC 地址(例如,92:d0: c 6:0 a: 29:33)
59 -\-memory , -m 内存限制
60 -\-memory-reservation 内存软限制
61 -\-memory-swap 交换限制等于内存加上交换:“-1” 以启用无限交换
62 -\-memory-swappiness 调整容器内存交换性(0 到 100)
63 -\-name 为容器指定名称
64 -\-net 将容器连接到网络
65 -\-net-alias 为容器添加网络范围的别名
66 -\-network 将容器连接到网络
67 -\-network-alias 为容器添加网络范围的别名
68 -\-no-healthcheck 禁用任何容器指定的运行状况检查
69 -\-oom-kill-disable 禁用 OOM 杀手
70 -\-oom-score-adj 调整主机的 OOM 偏好设置(-1000 到 1000)
71 -\-pid 要使用的 PID 命名空间
72 -\-pids-limit 调整容器 pid 限制(设置为 -1 表示无限制)
73 -\-platform API 1.32+< https://docs.d ocker.com/engine/api/ v1.32/>__如果服务器支持多平台,则设置平台
74 -\-privileged 为该容器提供扩展权限
75 -\-publish , -p 将容器的端口发布到主机
76 -\-publish-all , -P 将所有公开端口发布到随机端口
77 -\-pull 在运行之前拉取映像(“始终”、“从不”)
78 -\-read-only 将容器的根文件系统挂载为只读
79 -\-restart 要在容器退出时应用的重启策略
80 -\-rm 容器退出时自动将其移除
81 -\-runtime 此容器要使用的运行时系统
82 -\-security-opt 安全性选项
83 -\-shm-size /dev/shm 的大小
84 -\-sig-proxy 代理接收到进程的信号
85 -\-stop-timeout API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__停止容器的超时时间(以秒为单位)
86 -\-storage-opt 容器的存储驱动程序选项
87 -\-sysctl Sysctl 选项
88 -\-tmpfs 挂载 tmpfs 目录
89 -\-tty , -t 分配一个伪 TTY
90 -\-ulimit Ulimit 选项
91 -\-userns 要使用的用户命名空间
92 -\-uts 要使用的 UTS 命名空间
93 -\-volume , -v 绑定挂载卷
94 -\-volume-driver 容器的可选音量驱动程序
95 -\-volumes-from 从指定容器挂载卷

如果您使用上述运行时系统配置运行模拟作业,则模拟因AWS RoboMaker而失败并显示错误代码 4XX

您的容器映像:

  • 必须开放容器倡议 (OCI) 投诉。

  • 必须为 X86_64 架构构建。如果它是针对不同的架构构建的,则模拟因AWS RoboMaker而失败并显示错误代码4XX

  • 未压缩的大小必须小于或等于 40 GB。如果您的容器映像未压缩时大于 40 GB,则AWS RoboMaker使模拟失败并显示错误代码 4XX

  • 必须有 V2 映像清单,架构版本 2 兼容。

  • 必须使用基于 Linux 的基础映像。如果您不使用基于 Linux 的基础映像,则模拟因AWS RoboMaker而失败并显示错误代码4XX

  • 必须使用相互兼容的开发环境和操作系统。以下是开发环境和操作系统的兼容组合示例:

    • 机器人操作系统 (ROS) Melodic — ubuntu: bionic

    • 机器人操作系统 (ROS) 2 Foxy — ubuntu: focal

    如果您不使用兼容的机器人框架和操作系统组合,则您的模拟可能会显示出意外行为。

以下是您的容器映像的二进制要求:

为了支持 GUI 流式传输,我们建议安装和获取以下二进制文件:

  • devilspie

我们建议您的容器映像为其可执行文件使用绝对路径。我们还建议容器内的可执行文件正确运行。如果找不到可执行文件的路径,您的模拟就会失败。

您的容器映像:

  • 如果在应用程序中使用 OpenGL,则必须安装 glvnd。

  • 如果在应用程序中使用 CUDA,则必须使用 NVIDIA CUDA 11.2 或更低版本。

  • 如果在应用程序中使用 OpenGL,则必须有 OpenGL 版本 4.6 或更低版本。

  • 如果在应用程序中使用 Vulkan API,则必须使用 Vulkan 1.2 或更低版本。

  • 如果在应用程序中使用 OpenGL,则必须有 OpenGL 版本 1.2 或更低版本。

注意

AWS RoboMaker 仅支持 Vulkan 进行屏幕外渲染,并且无法在 GUI 显示器中运行。因此,如果使用 Vulkan,则应将 StreamUI 设置为 false

有关如何创建 GPU 映像的详细说明,请参阅 创建用于运行 GPU 应用程序的映像

容器映像必须提供用于采购的入口点脚本。入口点脚本必须exec "${@:1}" 作为最后一行,这样 AWS RoboMaker 才能运行入口点脚本。运行 entrypoint 脚本使您能够使用 roslaunch package-name 命令。启动文件命令来运行容器。

您的容器映像无法在 Dockerfile 中使用 VOLUME。如果 VOLUME 在 Dockerfile 中,您的模拟失败并显示错误代码 4XX

您 Dockerfile 中的 EXPOSE 关键字会被 AWS RoboMaker 忽略。系统不会自动公开 EXPOSE 关键字公开的任何端口。如果您想在模拟中公开端口,则可以使用 AWS RoboMaker 端口转发配置。

AWS RoboMaker 使用以下环境变量。如果您在 AWS 上运行模拟,则AWS RoboMaker会覆盖您为以下环境变量指定的任何值:

  • ROBOMAKER*

  • DCV_VIRTUAL_SESSION

  • XDG_SESSION_ID

  • DCV_SESSION_ID

  • XDG_SESSION_TYPE

  • XDG_RUNTIME_DIR

  • SHLVL

  • XAUTHORITY

您无法在 Dockerfile 中指定 CMD。如果这样做,则 AWS RoboMaker 在模拟 launchConfig 中使用该命令进行覆盖。

如果您的容器运行的是 ROS,并且您需要在机器人应用程序和模拟应用程序之间进行通信,则应设置以下机器人框架:

  • ROS Master

  • Gazebo Master

  • ROS IP

您无法自定义容器中的 /etc/resolv.conf 文件。AWS RoboMaker 用自己的文件覆盖该文件。

如果您正在 AWS 中运行 Dockerfile,则无法挂载映像。如果在 Dockerfile 中指定 Mount,AWS RoboMaker 使您的模拟失败,并显示错误代码 4XX

您的容器映像不能使用被默认 Docker seccomp 配置文件阻止的系统调用。有关被屏蔽系统调用的信息,请参阅 Seccomp 安全配置文件

要指定运行映像的用户,可以在 Dockerfile 中指定 USER 关键字。如果您未指定用户,则 AWS RoboMaker 使用容器中的根用户。

在您的容器映像中,您可以将 USER 指定为名称或 UID:GID。如果您的容器映像没有 UID,则其默认值为 1000

您的容器映像无法在 /opt/amazon/robomaker 或其任何子文件夹中存储数据。AWS RoboMaker 只能使用该目录。如果您使用该目录,您的模拟可能无法正常运行。

不支持以下运行时系统配置。

Docker Run 论点 描述
1 --add-host 添加自定义的主机到 IP 映射(主机:ip)
2 --attach , -a 连接到 STDIN、STDOUT 或 STDERR
3 --blkio-weight Block IO(相对权重),介于 10 和 1000 之间,或者禁用 0(默认为 0)
4 --blkio-weight-devi ce Block IO 权重(相对设备权重)
5 --cap-add 添加 Linux 功能
6 --cap-drop 放弃 Linux 功能
7 --cgroup-parent 容器的可选父级 cgroup
8 --cgroupns API 1.41+ < https://docs.d ocker.com/engine/api/ v1.41/>__Cgroup 命名空间要使用 (host|private) “主机”:在 Docker 主机的 cgroup 命名空间 “private” 中运行容器:在自己的私有 cgroup 命名空间 中运行容器”:使用进程守护程序上默认 cgroupns-mode 选项配置的 cgroup 命名空间(默认)
9 --cidfile 将容器 ID 写入文件
10 --cpu-count CPU 计数(仅适用于 Windows)
11 --cpu-percent CPU 百分比(仅适用于 Windows)
12 --cpu-period 限制 CPU CFS(完全公平的调度程序)周期
13 --cpu-quota 限制 CPU CFS(完全公平的调度程序)配额
14 --cpu-rt-period API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__以微秒为单位限制 CPU 的实时周期
15 --cpu-rt-runtime API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__以微秒为单位限制 CPU 的实时运行时系统
16 --cpu-shares , -c CPU 份额(相对权重)
17 --cpus API 1.25+< https://docs.d ocker.com/engine/api/ v1.25/> __CPU 的数量
18 --cpuset-cpus 允许在其中执行的 CPU (0-3、0、1)
19 --cpuset-mems 允许在其中执行的 MEM (0-3、0、1)
20 --detach , -d 在后台运行容器并打印容器 ID
21 --detach-keys 重写用于分离容器的键序列
22 --device 向容器中添加主机设备
23 --device-cgroup-rul e 将规则添加到 cgroup 允许的设备列表中
24 --device-read-bps 限制设备读取速率(每秒字节数)
25 --device-read-iops 限制设备读取速率(每秒 IO)
26 --device-write-bps 限制设备写入速率(每秒字节数)
27 --device-write-iops 限制设备写入速率(每秒 IO)
28 --disable-content-t rust 跳过映像验证
29 --dns 自定义 DNS 服务器
30 --dns-opt 设置 DNS 选项
31 --dns-option 设置 DNS 选项
32 --dns-search 设置自定义 DNS 搜索域
33 --domainname 容器 NIS 域名
34 --gpus 要添加到容器中的 API 1.40+ < https://docs.d ocker.com/engine/api/ v1.40/>__GPU设备(“全部”用于传递所有 GPU)
35 --group-add 添加其他要加入的群组
36 --health-cmd 运行以检查运行状况
37 --health-interval 运行检查之间的间隔时间 (msm|h)(默认为 0)
38 --health-retries 需要连续出现故障才能报告运行状况不佳
39 --health-start-peri od API 1.29+ < https://docs.d ocker.com/engine/api/ v1.29/>__开始运行状况重试倒计时之前容器初始化的开始周期 (msm|h)(默认为 0)
40 --health-timeout 允许运行一次检查的最长时间 (msm|h)(默认为 0)
41 --help 打印用量
42 --hostname , -h 容器主机名
43 --init API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__在容器内初始化运行,用于转发信号并获取进程
44 --interactive , -i 即使未连接 STDIN 也要保持 STDIN 打开
45 --io-maxbandwidth 系统驱动器的最大 IO 带宽限制(仅限 Windows)
46 --io-maxiops 系统驱动器的最大 IO 限制(仅限 Windows)
47 --ip IPv4 地址(例如,172.30.100.104)
48 --ip6 IPv6 地址(例如,2001:db8::33)
49 --ipc 要使用的 IPC 模式
50 --isolation 容器隔离技术
51 --kernel-memory 内核内存限制
52 --label , -l 在容器上设置元数据
53 --label-file 读入以行分隔的标签文件
54 --link 添加指向其他容器的链接
55 --link-local-ip 容器 IPv4/IPv6 链路本地地址
56 --log-driver 容器的日志驱动程序
57 --log-opt 日志驱动程序选项
58 --mac-address 容器 MAC 地址(例如,92:d0: c 6:0 a: 29:33)
59 --memory , -m 内存限制
60 --memory-reservation 内存软限制
61 --memory-swap 交换限制等于内存加上交换:“-1” 以启用无限交换
62 --memory-swappiness 调整容器内存交换性(0 到 100)
63 --name 为容器指定名称
64 --net 将容器连接到网络
65 --net-alias 为容器添加网络范围的别名
66 --network 将容器连接到网络
67 --network-alias 为容器添加网络范围的别名
68 --no-healthcheck 禁用任何容器指定的运行状况检查
69 --oom-kill-disable 禁用 OOM 杀手
70 --oom-score-adj 调整主机的 OOM 偏好设置(-1000 到 1000)
71 --pid 要使用的 PID 命名空间
72 --pids-limit 调整容器 pid 限制(设置为 -1 表示无限制)
73 --platform API 1.32+< https://docs.d ocker.com/engine/api/ v1.32/>__如果服务器支持多平台,则设置平台
74 --privileged 为该容器提供扩展权限
75 --publish , -p 将容器的端口发布到主机
76 --publish-all , -P 将所有公开端口发布到随机端口
77 --pull 在运行之前拉取映像(“始终”、“从不”)
78 --read-only 将容器的根文件系统挂载为只读
79 --restart 要在容器退出时应用的重启策略
80 --rm 容器退出时自动将其移除
81 --runtime 此容器要使用的运行时系统
82 --security-opt 安全性选项
83 --shm-size /dev/shm 的大小
84 --sig-proxy 代理接收到进程的信号
85 --stop-timeout API 1.25+ < https://docs.d ocker.com/engine/api/ v1.25/>__停止容器的超时时间(以秒为单位)
86 --storage-opt 容器的存储驱动程序选项
87 --sysctl Sysctl 选项
88 --tmpfs 挂载 tmpfs 目录
89 --tty , -t 分配一个伪 TTY
90 --ulimit Ulimit 选项
91 --userns 要使用的用户命名空间
92 --uts 要使用的 UTS 命名空间
93 --volume , -v 绑定挂载卷
94 --volume-driver 容器的可选音量驱动程序
95 --volumes-from 从指定容器挂载卷

如果您使用上述运行时系统配置运行模拟作业,则模拟因AWS RoboMaker而失败并显示错误代码 4XX