连接到多个容器
目前,每个 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 窗口中连接到多个容器
- 在项目的根级别打开一个 VS Code 窗口。
- 从命令面板 (F1) 运行 Dev Containers: Reopen in Container (开发容器:在容器中重新打开),并选择
Python Container。 - VS Code 随后将启动两个容器,重新加载当前窗口并连接到所选容器。
- 接下来,通过 文件 > 新建窗口 打开一个新窗口。
- 在当前窗口中打开项目根目录。
- 从命令面板 (F1) 运行 Dev Containers: Reopen in Container (开发容器:在容器中重新打开),并选择
Node Container。 - 当前 VS Code 窗口将重新加载并连接到所选容器。
您现在可以在不同的窗口中与这两个容器进行交互。
在单个 VS Code 窗口中连接到多个容器
- 在项目的根级别打开一个 VS Code 窗口。
- 从命令面板 (F1) 运行 Dev Containers: Reopen in Container (开发容器:在容器中重新打开),并选择
Python Container。 - VS Code 随后将启动两个容器,重新加载当前窗口并连接到所选容器。
- 从命令面板 (F1) 运行 Dev Containers: Switch Container (开发容器:切换容器),并选择
Node Container。 - 当前 VS Code 窗口将重新加载并连接到所选容器。
- 您可以使用相同的命令切换回来。
连接到两个容器时扩展 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 中引用不同的文件可能会产生意想不到的结果。