连接到多个容器
目前,每个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中的多个容器
- 在项目根目录打开 VS Code Windows。
- 运行 开发容器:在容器中重新打开 从命令面板 (F1) 选择
Python 容器输入:. - VS Code 将启动两个容器,重新加载当前Windows并连接到选定的容器。
- 接下来,使用 文件 > 新建Windows 打开一个新Windows。
- 在当前Windows中以根级别打开你的项目。
- 运行 开发容器:在容器中重新打开 从命令面板 (F1) 选择
节点容器输入:. - 当前 VS Code Windows将重新加载并连接到选定的容器。
您现在可以从不同的Windows与两个容器进行交互。
在 VS Code Windows中连接到多个容器
- 在项目根目录打开 VS Code Windows。
- 运行 开发容器:在容器中重新打开 从命令面板 (F1) 选择
Python 容器输入:. - VS Code 将启动两个容器,重新加载当前Windows并连接到选定的容器。
- 运行 开发容器:切换容器 从命令面板 (F1) 并选择
节点容器输入:. - 当前 VS Code Windows将重新加载并连接到选定的容器。
- 您可以使用相同的命令切换回来。
在连接两个容器时扩展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可能会产生意外的结果。