终止支持通知: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
请求中使用每个模拟应用程序或机器人应用程序中 launchConfig
的 command
参数提供启动命令列表。在模拟作业中设置为 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
。