參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

連線到多個容器

目前,每個 Visual Studio Code 視窗只能連線到一個容器。但是,您可以啟動多個 VS Code 視窗以連線到它們

如果您更喜歡使用 devcontainer.json 並正在使用 Docker Compose,您可以為原始碼樹中的每個服務建立單獨的 devcontainer.json 檔案,每個檔案都指向一個通用的 docker-compose.yml

要了解其工作原理,請考慮以下示例源樹

📁 project-root
    📁 .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 如下所示

services:
  python-api:
    image: mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
    volumes:
      # Mount the root folder that contains .git
      - .:/workspace
    command: sleep infinity
    # ...

  node-app:
    image: mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm
    volumes:
      # Mount the root folder that contains .git
      - .:/workspace
    command: sleep infinity
    # ...

然後,您可以按如下方式為 Python 開發設定 ./devcontainer/python-container/devcontainer.json

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

接下來,您可以透過更改 workspaceFolder 為 Node.js 開發設定 ./devcontainer/node-container/devcontainer.json

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

devcontainer.json 檔案中的 "shutdownAction": "none" 是可選的,但它會在 VS Code 關閉時保持容器執行——這可以防止您意外關閉兩個容器,因為您關閉了一個視窗。

在多個 VS Code 視窗中連線到多個容器

  1. 在專案的根級別開啟一個 VS Code 視窗。
  2. 從命令面板 (F1) 執行 開發容器:在容器中重新開啟 並選擇 Python 容器
  3. VS Code 將啟動兩個容器,重新載入當前視窗並連線到選定的容器。
  4. 接下來,使用 檔案 > 新建視窗 開啟一個新視窗。
  5. 在當前視窗中開啟專案根級別。
  6. 從命令面板 (F1) 執行 開發容器:在容器中重新開啟 並選擇 Node 容器
  7. 當前的 VS Code 視窗將重新載入並連線到選定的容器。

您現在可以從單獨的視窗與兩個容器進行互動。

在單個 VS Code 視窗中連線到多個容器

  1. 在專案的根級別開啟一個 VS Code 視窗。
  2. 從命令面板 (F1) 執行 開發容器:在容器中重新開啟 並選擇 Python 容器
  3. VS Code 將啟動兩個容器,重新載入當前視窗並連線到選定的容器。
  4. 從命令面板 (F1) 執行 開發容器:切換容器 並選擇 Node 容器
  5. 當前的 VS Code 視窗將重新載入並連線到選定的容器。
  6. 您可以使用相同的命令切換回來。

連線到兩個容器時擴充套件 Docker Compose 檔案

如果您想為開發擴充套件您的 Docker Compose 檔案,您應該使用一個 docker-compose.yml 檔案,它擴充套件兩個服務(根據需要)並被兩個 devcontainer.json 檔案引用。

例如,考慮以下 docker-compose.devcontainer.yml 檔案

services:
  python-api:
    volumes:
      - ~:~/local-home-folder # Additional bind mount
    # ...

  node-app:
    volumes:
      - ~/some-folder:~/some-folder # Additional bind mount
    # ...

兩個 .devcontainer.json 檔案都將按如下方式更新

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

此 compose 檔案列表在啟動容器時使用,因此在每個 devcontainer.json 中引用不同的檔案可能會產生意想不到的結果。