DSW 子容器允许用户在一个 DSW 实例内通过 Docker in Docker(DinD)技术创建和管理多个二级容器,实现环境隔离和资源管理。其在控制台提供可视化操作界面,支持子容器的创建、启停、删除以及 SSH 远程访问。
应用场景
在同一 DSW 实例中隔离不同的开发环境,对比验证不同镜像下的训练效果。
在 GPU 资源紧张时,通过创建不同镜像的子容器来切换运行环境,无需重建实例重新排队。
多人共用一个 DSW 实例时,通过子容器实现开发者之间的环境隔离和资源隔离。
前提条件
目前,子容器功能仅支持由“灵骏资源组”或“1.0版本的通用资源组”创建的DSW实例。
实例管理员(即实例创建者/Owner)需拥有 DSW 实例的创建和管理权限。
DSW 实例需在创建时开启启用多容器隔离 (DinD)功能。
如果需要通过 SSH 访问子容器,DSW 实例需同时开启 SSH 功能。
角色与权限说明
子容器管理涉及两类角色:
实例管理员(Owner):即 DSW 实例的创建者,负责实例级别的配置管理,包括开启 DinD、配置访问限制、设置子容器数量上限和数据目录隔离规则。
子容器开发者:拥有工作空间相应角色(如算法开发)或 RAM 权限的用户,可以查看子容器列表、创建自己的子容器、通过 SSH 登录使用子容器。每个开发者只能启停、删除自己创建的子容器,但可以查看全部子容器的信息。
权限控制支持两种方式:
基于工作空间角色:实例管理员可在实例配置中限制特定角色(如算法开发)访问主容器,被限制的角色只能通过子容器进行开发工作。理解成本低,适合大多数场景。
基于 RAM 策略:通过配置 RAM Policy 实现更细粒度的权限控制,可将权限细化到特定实例的特定子容器。适合对权限管控要求更高的企业客户。
实例管理员操作指南
创建实例时开启多容器隔离
登录 PAI 控制台,进入 DSW 页面,点击创建实例。
在实例配置中,找到启用多容器隔离 (DinD)开关并开启。
开启后,会出现以下配置项:
限制访问主容器的角色:下拉选择需要限制的工作空间角色。被限制的角色将无法直接打开和操作 DSW 主容器,只能通过SSH登录到子容器进行开发。
例如:选择算法开发后,拥有算法开发角色的用户将无法进入主容器,但仍可在实例详情页的子容器管理中创建和使用自己的子容器。
如果不选择任何角色,则所有有权限的用户都可以正常访问主容器,和现有行为一致。
子容器数量上限:设置该实例允许创建的子容器最大数量,支持配置 1~16 的整数,默认值为 10。
数据目录隔离配置:指定数据目录隔离配置文件在主容器内的路径,默认为
/etc/docker/dockerboard/mount_access.json。该配置文件用于控制不同用户创建子容器时可挂载的数据目录范围。可先单击配置模板下载获取配置文件模板,后续配置步骤请参见配置数据目录隔离。
完成其他实例配置后,提交创建即可。
配置数据目录隔离
数据目录隔离用于控制不同开发者在创建子容器时可以挂载的数据目录范围,防止开发者越权访问其他人的存储数据。
配置步骤:
在实例创建/编辑页面中,单击数据目录隔离配置下方的配置模板下载链接,获取 JSON 模板文件。
按照模板格式,填写阿里云子账号 UID 与该用户可访问的 DSW 主容器内目录的映射关系。
将编辑好的
mount_access.json文件放置到 DSW 主容器中配置路径所指定的位置(默认为/etc/docker/dockerboard/mount_access.json)。
配置文件格式:
配置文件为 JSON 格式,以阿里云子账号 UID 为 key,每个用户可配置 Allow(允许挂载的目录列表)和 Deny(禁止挂载的目录列表)两个字段。示例如下:
{
"123124432xxx": {
"Allow": [
"/mnt/workspace",
"/mnt/data1"
],
"Deny": [
"/mnt/data2"
]
},
"224321234xxx": {
"Allow": [
"*"
]
}
}各字段说明:
字段 | 说明 |
key(如 | 阿里云子账号的 UID |
Allow | 允许该用户挂载的主容器目录列表。设置为 |
Deny | 禁止该用户挂载的主容器目录列表。优先级高于 Allow,即使 Allow 中包含某目录,Deny 中同时存在则不允许挂载。该字段可省略 |
配置生效规则:
如果配置文件存在且格式有效,系统在子容器创建时会校验当前用户是否有权限挂载所选目录。
如果配置文件中找不到当前用户的对应记录,该用户在新建子容器时将不允许挂载数据目录,页面会提示:"您的账号没有可用的 DSW 路径,如有挂载需求,请联系实例负责人为您增加配置"。
如果配置文件路径为空或文件不存在,系统不进行目录隔离校验,所有用户均可挂载主容器的任意目录。
子容器开发者操作指南
进入子容器管理页面
登录 PAI 控制台,进入 DSW 页面。
在实例列表中,点击已开启 DinD 的目标实例名称,进入实例详情页。
在实例详情页中,单击切换至子容器管理页签,进入管理页面。
子容器管理页签仅在 DSW 主容器处于运行中状态时展示。如果主容器未运行,该 Tab 不会显示。
新建子容器
在子容器管理页面,单击新建子容器按钮,在弹出的创建表单中完成以下配置。
基础信息
配置项 | 是否必填 | 说明 | 可选值/示例 |
容器名称 | 必填 | 为子容器指定一个便于识别的名称。 | 例如: |
主机名 | 选填 | 为子容器指定自定义主机名。 | 例如: |
重启策略 | 选填 | 设置容器退出后的自动重启策略。 | 例如:不自动重启 |
环境信息
配置项 | 是否必填 | 说明 | 可选值/示例 |
镜像配置 | 必填 | 选择子容器使用的镜像。支持两种方式:
| 例如: |
SSH 公钥 | 必填 | 填写本地客户端的 SSH 公钥内容,用于后续通过 SSH 登录子容器。 | 若尚未生成 SSH 密钥对,可在本地终端执行: |
主容器挂载 | 选填 | 开启持久化系统盘的实例内,子容器可挂载主容器任意路径;未开启持久化系统盘的实例内,子容器仅可挂载主容器挂载的存储路径和数据集。 | |
数据集挂载 | 选填 | 仅支持挂载已被主容器挂载的数据集。 | |
环境变量 | 选填 | 以键值对形式为子容器设置自定义环境变量。 | 例如: |
启动命令 | 选填 | 自定义容器启动时执行的命令。 | 例如: |
入口点 | 选填 | 自定义容器的 entrypoint。 | 例如: |
资源信息
配置项 | 是否必填 | 说明 | 可选值/示例 |
GPU设备挂载 | 选填 | 如果 DSW 实例配备了 GPU 资源,创建子容器时可以选择需要挂载的 GPU 设备。系统会列出当前实例的所有 GPU 卡(包括设备号),支持多选。 选择 GPU 后,对应的 GPU 设备将被挂载到子容器中供使用。 | |
CPU上限 | 选填 | 设置该子容器可使用的最大CPU用量。若留空,则默认不设上限,可能会抢占实例内的其他空闲资源。 | 例如:8核 |
内存上限 | 选填 | 设置该子容器可使用的最大内存用量。若留空,则默认不设上限,可能会抢占实例内的其他空闲资源。 | 例如:48 GiB |
配置完成后,单击确定创建子容器。您可以在子容器管理页面,单击子容器创建任务进度查看创建过程。
管理子容器
在子容器列表中,每个子容器的操作栏提供以下功能:
仅可操作自己创建的子容器。
启动:将处于已停止状态的子容器重新启动。
停止:停止正在运行的子容器。停止后容器内的进程会终止,但容器配置和挂载的存储数据不会丢失。
重启:重启正在运行的子容器,等效于先停止再启动。
日志:查看子容器的运行日志,可用于排查问题。
SSH连接信息:查看该子容器的 SSH 连接信息,包括连接用户名和连接命令。
删除:删除子容器。删除后容器内未通过挂载方式持久化的数据将不可恢复,请谨慎操作。
查看子容器列表
进入子容器管理页面后,可以看到当前实例上所有子容器的列表。列表展示以下信息:
字段 | 说明 |
容器名称 | 子容器的名称 |
用户名称 | 创建该子容器的用户名 |
状态 | 当前状态,包括:创建中(镜像拉取中)、已创建、运行中、已暂停、重启中、已停止、启动中、停止中、更新中等 |
显存GiB | GPU 设备号及显存使用量 |
CPU资源 | CPU 使用率和核数 |
内存GiB | 内存使用情况 |
容器镜像 | 子容器使用的镜像 |
创建时间 | 子容器的创建时间 |
所有拥有 DSW 可读权限的用户都可以查看完整的子容器列表,但只能操作(启动、停止、删除)自己创建的子容器。
查看创建任务列表
由于子容器创建过程可能耗时较长(如需拉取大型镜像),系统提供了创建任务跟踪能力。
在子容器管理页面右上角,单击子容器创建任务进度,可以查看所有容器创建任务的状态和日志。对于处于"创建中"状态的任务,支持手动中止操作。任务记录默认保留 3 天后自动回收。
通过SSH访问子容器
子容器创建成功并处于运行状态后,可以通过 SSH 方式远程登录访问。
操作步骤:
在子容器列表中,找到目标子容器,点击操作栏中SSH 连接信息,其中包括连接用户名和完整连接命令。
在本地终端中执行连接命令即可登录子容器。连接命令格式为:
ssh <连接用户名>@<实例公网地址> -p 22 -i <本地私钥路径>各参数说明:
参数 | 说明 |
连接用户名 | 系统自动生成,与子容器一一绑定,显示在"访问方式"弹窗中 |
实例公网地址 | DSW 主容器的公网访问地址 |
本地私钥路径 | 与创建子容器时填写的 SSH 公钥对应的私钥文件路径(如 ~/.ssh/id_rsa) |
SSH 登录成功后,会直接进入对应子容器的命令行环境。所有子容器共享 DSW 主容器的 22 端口,通过各自不同的 SSH 密钥和专属连接用户名实现访问隔离。
注意事项与限制
依赖主容器状态:子容器的所有管理能力均依赖 DSW 主容器的运行状态。当主容器停止或异常时,子容器管理页面不可用,子容器也无法访问。
存储挂载范围:子容器的存储挂载仅支持主容器内的目录路径,不能直接挂载外部存储。
子容器数量限制:每个实例的子容器数量受管理员配置的上限限制,最大可配置为 16 个。
功能范围:子容器不具备 DSW 主容器的完整开发机能力(如内置的 JupyterLab、Terminal、WebIDE 等应用),当前通过 SSH 方式访问使用。
数据持久化:子容器内未通过存储挂载方式持久化的数据,在子容器删除后将不可恢复。建议将重要数据存放在挂载的目录中。
实例删除影响:删除 DSW 实例时,其上所有子容器也会一并删除,请提前做好数据备份。
常见问题
Q:为什么在实例详情页看不到"子容器管理"Tab?
请确认:
该 DSW 实例在创建时已开启启用多容器隔离 (DinD)功能;
DSW 主容器当前处于运行中状态。主容器未运行时,子容器管理 Tab 不会展示。
Q:新建子容器时无法挂载数据目录?
可能是实例管理员配置了数据目录隔离策略,且您的阿里云账号未在配置文件中被分配可用目录。请联系实例管理员在 mount_access.json 中为您添加配置。
Q:SSH 连接子容器失败?
请依次检查:
子容器是否处于"运行中"状态;
使用的本地私钥是否与创建子容器时填写的公钥匹配;
DSW 实例是否已开启 SSH 功能;
网络是否可以访问实例的公网地址和 22 端口。
Q:子容器创建耗时很长?
子容器创建时间主要取决于镜像拉取速度。使用大型镜像时首次拉取可能需要较长时间。您可以在创建任务列表中查看进度和日志。后续使用相同镜像创建新容器时,由于镜像已缓存在本地,速度会快很多。
Q:可以操作其他人创建的子容器吗?
默认情况下,每个用户只能操作自己创建的子容器,但可以查看所有子容器的基本信息。如果需要操作他人的子容器,需要由管理员通过 RAM 策略授予相应权限。