---
url: /zh/workspaces/double-container.md
description: |
  介绍云原生开发的单容器模式（开发环境与 code-server 在同一容器）和双容器模式 （分两个容器运行）的区别及各自适用场景与配置方式。
---
云原生开发支持两种启动模式：

* **单容器模式**：开发环境与 `code-server` 在同一容器中运行
* **双容器模式**：开发环境与 `code-server` 分别在两个容器中运行，两个容器的工作区（`/workspace`）目录互通

**开发环境**：用户通过 `.ide/Dockerfile` 或自定义镜像指定的容器，或 CNB 默认容器环境，内含用户安装或预装的软件。

## 单容器模式

推荐使用单容器模式，以下方式将以单容器模式启动：

### 使用默认配置启动

未做任何配置（即未配置启动流水线和 `.ide/Dockerfile`）时，使用默认配置启动。
默认开发环境已安装 `code-server` 和 `ssh` 服务，
因此使用单容器模式，同时支持 WebIDE 和 VSCode 远程开发。

详见[默认开发环境](./default-dev-env.md)。

### 使用自定义配置启动

配置了启动流水线或 `.ide/Dockerfile`，且自定义镜像或 `.ide/Dockerfile` 中已安装 `code-server` 时，使用单容器模式。

以下三种方式均使用单容器模式启动（启动镜像均已安装 `code-server`）：

* [通过 docker 镜像指定开发环境](./custom-dev-env.md#同时自定义开发环境和启动流程)
* [通过 Dockerfile 指定开发环境](./custom-dev-env.md#通过Dockerfile自定义开发环境)
* [同时自定义开发环境和启动流程](./custom-dev-env.md#同时自定义开发环境和启动流程)

## 双容器模式

当开发环境容器中未安装 `code-server` 时，系统会额外启动一个 `code-server` 容器
提供代码服务，即双容器模式。两个容器的工作区（`/workspace`）目录互通。

以下两种方式会以双容器模式启动：

```yaml title=".cnb.yml"
# 方式 1：使用未安装 code-server 的 Docker 镜像
$:
  vscode:
    - docker:
        image: node:22
      services:
        - vscode
        - docker
      stages:
        - name: ls
          script: ls -al
```

```dockerfile title=".ide/Dockerfile"
# 方式 2：使用未安装 code-server 的自定义 Dockerfile
FROM node:20

RUN apt-get update && apt-get install -y git wget unzip openssh-server

ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
```

两种方式的共同点在于开发环境容器中未安装 `code-server`，系统会自动补充 `code-server` 容器，形成双容器模式。

## 双容器模式 — 跨容器终端

双容器模式下，访问 WebIDE 或 VSCode 时实际连接的是 `code-server` 容器。
要访问开发环境容器，可使用 WebIDE 或 VSCode 中提供的跨容器终端——
默认打开的终端即为跨容器访问开发环境的终端，名为 `CNB`。

如果开发环境容器中不支持 `git`，可切换到非 `CNB` 终端，使用 `code-server` 自带的终端执行 `git` 操作。

## 双容器模式 — 插件能力限制

双容器模式下，VSCode 插件安装在 `code-server` 容器中，
可能无法访问开发环境容器（如 Debug 等需要访问开发环境容器的功能）。
