GenStudio LLM API 部分模型价格调整公告GenStudio LLM API 部分模型价格调整公告 ,新价格 2025 年 11 月 1 日生效调价公告
Skip to content

在开发机内使用 Docker

开发机可启用 Docker 容器( DinD)功能,允许用户在开发机内(主容器)运行其他容器,从而提供更高的灵活性和隔离性。

特别是在需要 GPU 资源的场景下,用户可以在开发机 DinD 环境中构建镜像,并创建挂载 GPU 的容器,测试容器化应用,并将构建好的镜像推送到租户镜像仓库。

注意

在该场景下,开发机为主容器,您在开发机内部启动的容器与主容器为互相隔离的环境,需要自行挂载 GPU 和文件存储目录。

启用方式

在创建开发机时,找到 Docker 容器开关,设置为开启。

开启后,登录开发机,执行 dockerctl status 可查看 Docker 服务状态。

shell
dockerctl status

 docker.service - Docker Application Container Engine
        Active: active (running) since 2024-12-02 04:40:33 Monday; 0 days ago
         Tasks: 116
        Memory: 0.00%
           CPU: 0.00%

注意

Dockerctl 是一个 Docker 服务管理工具,用于管理 Docker 守护进程的生命周期和配置。详见 Dockerctl

创建开发机后,也可前往开发机详情页,通过「改配」按钮进入以下页面,调整开关启用状态。如需帮助,请参见更改开发机配置

alt text

使用场景

  • 构建镜像,并将镜像推送到租户私有镜像仓库。
  • 从现有的镜像归档文件(docker save 的压缩文件)创建镜像,并推送到租户私有镜像仓库。
  • 测试容器化应用。

已知限制

使用方式与重要说明

  • 在开发机内可以直接使用 Docker 构建镜像、运行容器与使用 Docker Compose(需遵守下文限制)。
  • 网络:默认使用 bridge 网络;使用 -p 暴露端口时,可能与当前环境中的其他服务产生端口冲突,请选择未占用端口;对外可达性受网络与安全策略影响。
  • 存储:镜像与容器数据由当前环境的 Docker 服务统一管理;请勿直接操作底层数据目录。查看占用请用 docker system df,清理请使用 dockerctl prune(顺序:dockerctl stopdockerctl prunedockerctl start)。
  • 资源:内部容器与开发机共享 CPU、内存与 GPU 资源;多个内部容器也会共享这些资源。如需明确配额,请通过“开发机规格/改配”进行控制。
  • 高级限制:特权模式、能力变更、设备直通、部分 sysctls 等可能被拒绝,详见权限与 Capabilities

计算资源可用性

如果不需要使用 Docker 容器功能,建议在创建开发机时不要启用 Docker 容器 开关,避免额外开销。

注意

开启「Docker 容器」后,开发机(主容器)与内部容器共享 CPU 和内存资源。

  • 不支持在 docker run 中设置 cgroup 资源限额参数(如 --cpus--cpuset-cpus--memory--memory-swap 等);此类参数通常会在容器创建时被拒绝并报错。

  • 默认情况下不设置 Docker 层面的资源限额,HostConfig.Resources 多数字段会显示为 0 或空(表示未限制);容器会在当前开发机可用配额的范围内,与其他工作负载公平竞争 CPU/内存。可用以下命令确认容器未设置 Docker 层资源限额。

    shell
    docker inspect <container> --format '{{json .HostConfig.Resources}}'
  • 显式设置资源参数在本环境可能被拒绝并报错(示例):

    shell
    error setting cgroup config for procHooks process: ... cpu.max: no such file or directory
    error setting cgroup config for procHooks process: ... memory.swap.max: no such file or directory

存储资源可用性

  • 开发机主容器的 rootfs 上的路径。开发机 rootfs 默认提供 100GB 持久化存储,请及时关注用量。磁盘写满后将导致开发机异常。详见启动并挂载主容器本地目录
  • 如果开发机已挂载共享高性能存储,建议内部容器使用共享存储作为持久化存储。详见启动并挂载高性能存储
  • 如果使用弹性资源创建开发机,且已购买足够大的云盘,建议将云盘上的目录挂载给内部容器,作为持久化存储。详见启动并挂载云盘
  • 开发机内部容器共享主容器的 rootfs 100GB 存储容量。
  • 镜像与容器层实际由宿主机 dockerd 管理,不建议直接操作 /var/lib/docker 目录;容量查看可用 docker system df。清理请使用 dockerctl prune(需先 dockerctl stop,再 dockerctl start),标准 docker system prune/docker image prune/docker builder prune 在本环境可能被策略禁用或不完全生效,详见 Dockerctl
  • 跨容器共享数据时,优先选择“共享高性能存储/云盘”等平台已挂载的目录或 docker volume。直接把主容器内部路径 -v 绑定到新容器,实质会在宿主机侧尝试绑定节点路径,可能导致路径不一致或权限错配。

网络可用性与端口暴露

  • 内部容器使用宿主机默认 bridge 网络;可使用 -p <hostPort>:<containerPort> 映射到宿主机端口(注意避免与宿主机当前使用的端口冲突)。
  • 内部容器与开发机主容器不是同一个 localhost。要访问容器里的服务:请使用该容器的 IP 地址,或者(在同一 Docker 自定义网络中)直接用容器名/别名访问;必要时可使用 --network host
  • 非主机网络模式下,内部容器内无法使用 host.docker.internal 直接访问主机(开发机);请改用 --network host--add-host $(hostname):$(hostname -i) 等方式,详见「操作容器 · 从容器内访问开发机上的服务」。

可选自检:

shell
docker inspect <container> --format '{{ .NetworkSettings.IPAddress }}'

GPU 可用性

在开发机内启动容器时,可以使用 --gpus=all 挂载全部 GPU,开发机(主容器)内 GPU 资源依然可用。

如果在开发机内启动多个容器,这些容器会共享 GPU 资源。

Docker Compose

支持使用 Docker Compose,但需要自行安装工具。详见 Docker Compose。在本环境中请注意:

  • privilegedcap_add/cap_dropdevicessysctls 等字段可能被平台拒绝或忽略。
  • deploy.resources.limits 可作为意向声明,实际仍以平台配额为准。
  • 存储挂载优先使用平台提供的共享存储/云盘目录;避免指向主容器内部仅局部可见的路径。

权限与 Capabilities

  • 不支持使用 --privileged 参数启动容器;平台在创建时会拒绝该请求,常见错误为:invalid create request: privileged is not supported.

  • 不支持使用 --cap-add/--cap-drop 修改能力集合;常见错误为:invalid create request: linux capabilities setting is not supported.

  • 容器能力固定为约 14 项基础能力(示例):cap_chown, cap_dac_override, cap_fowner, cap_fsetid, cap_kill, cap_setgid, cap_setuid, cap_setpcap, cap_net_bind_service, cap_net_raw, cap_sys_chroot, cap_mknod, cap_audit_write, cap_setfcap;Bounding set 与 Current 相同,无法再提升。

  • 如需验证当前能力,可在容器内执行:

    shell
    apt update && apt install -y libcap2-bin # 如未安装
    capsh --print
    # 或
    grep Cap /proc/self/status
  • 如遇到文件权限问题,请提前在开发机内调整目录权限,例如 chmod -R 777 /path/to/directory

  • 部分镜像挂载的目录可能需要提前在开发机内调整所有者权限,例如 chown -R 999:999 /path/to/directory

常见问题

如何添加 proxy 或 mirror 配置?

详见 Dockerctl

为什么 --privileged--cap-add 在这里会报错?

平台为多租户安全强策略,容器创建时会拒绝特权与能力变更请求,错误文案通常为:

shell
invalid create request: privileged is not supported.
invalid create request: linux capabilities setting is not supported.

磁盘空间不足怎么办?如何清理 Docker 服务占用的空间?

当开发机提示空间不足或镜像/容器/缓存占用过多时,请按以下方式处理:

请使用 dockerctl prune 执行清理,并按照以下顺序进行:dockerctl stopdockerctl prunedockerctl start。仅查看占用请使用 docker system df。标准 docker system/image/builder prune 在本环境可能被策略禁用或不完全生效,详见「dockerctl prune」。