本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

连接到多个容器

目前,每个Visual Studio CodeWindows只能连接到一个容器。然而,您可以启动多个VS CodeWindows来附加到它们

如果你更喜欢使用devcontainer.json而是使用Docker Compose,您可以创建单独的 devcontainer.json在源代码树中的每个服务的文件,每个文件都指向一个共同的docker-compose.yml输入:.

为了了解如何工作,请考虑以下示例源树:

📁 项目根目录
📁 .git
📁 .devcontainer
📁 python-container
📄 devcontainer.json
📁 node-container
📄 devcontainer.json
📁 python-src
📄 hello.py
📁 node-src
📄 hello.js
📄 docker-compose.yml











地点.git文件夹很重要,因为我们需要确保容器可以访问此路径以进行源代码控制。

接下来,假设docker-compose.yml在根目录下如下所示:

服务:
  python-api:
    镜像: mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
:
      # 挂载包含 .git 的根文件夹
      - .:/workspace
    命令: sleep infinity
    # ...

  node-app:
    镜像: mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm
:
      # 挂载包含 .git 的根文件夹
      - .:/workspace
    命令: sleep infinity
    # ...

然后你可以设置./devcontainer/python-container/devcontainer.json用于Python开发如下:

{
  "name": "Python Container",
  "dockerComposeFile": ["../../docker-compose.yml"],
  "service": "python-api",
  "shutdownAction": "none",
  "workspaceFolder": "/workspace/python-src"
}

接下来,您可以设置./devcontainer/node-container/devcontainer.json通过更改进行Node.js开发工作区文件夹输入:.

{
  "name": "Node Container",
  "dockerComposeFile": ["../../docker-compose.yml"],
  "service": "node-app",
  "shutdownAction": "none",
  "workspaceFolder": "/workspace/node-src"
}

"shutdownAction": "none"devcontainer.json保存文件是可选的,但会在 VS Code 关闭时让容器保持运行状态,这样可以防止你通过关闭一个Windows而意外地关闭两个容器。

连接到多个 VS Code Windows中的多个容器

  1. 在项目根目录打开 VS Code Windows。
  2. 运行 开发容器:在容器中重新打开 从命令面板 (F1) 选择 Python 容器输入:.
  3. VS Code 将启动两个容器,重新加载当前Windows并连接到选定的容器。
  4. 接下来,使用 文件 > 新建Windows 打开一个新Windows。
  5. 在当前Windows中以根级别打开你的项目。
  6. 运行 开发容器:在容器中重新打开 从命令面板 (F1) 选择 节点容器输入:.
  7. 当前 VS Code Windows将重新加载并连接到选定的容器。

您现在可以从不同的Windows与两个容器进行交互。

在 VS Code Windows中连接到多个容器

  1. 在项目根目录打开 VS Code Windows。
  2. 运行 开发容器:在容器中重新打开 从命令面板 (F1) 选择 Python 容器输入:.
  3. VS Code 将启动两个容器,重新加载当前Windows并连接到选定的容器。
  4. 运行 开发容器:切换容器 从命令面板 (F1) 并选择 节点容器输入:.
  5. 当前 VS Code Windows将重新加载并连接到选定的容器。
  6. 您可以使用相同的命令切换回来。

在连接两个容器时扩展Docker Compose文件

如果你想 扩展你的Docker Compose文件用于开发,你应该使用一个 docker-compose.yml 扩展 两者 服务(如有需要)并引用在 两者 devcontainer.json文件。

例如,请考虑这个docker-compose.devcontainer.yml文件:

服务:
  python-api:
:
      - ~:~/local-home-folder # 额外的挂载
    # ...

  node-app:
    volumes:
      - ~/some-folder:~/some-folder # 额外的挂载
    # ...

两者.devcontainer.json文件将按如下方式进行更新:

"dockerComposeFile": [
  "../../docker-compose.yml",
  "../../docker-compose.devcontainer.yml",
]

此列表中的 Compose 文件用于启动容器时,因此在每个中引用不同的文件devcontainer.json可能会产生意外的结果。