连接到多个容器
目前,每个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
如下所示:
version: '3'
services:
python-api:
image: mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
volumes:
# Mount the root folder that contains .git
- .:/workspace:cached
command: sleep infinity
links:
- node-app
# ...
node-app:
image: mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm
volumes:
# Mount the root folder that contains .git
- .:/workspace:cached
command: sleep infinity
# ...
然后,您可以按照以下方式设置./devcontainer/python-container/devcontainer.json
以进行Python开发:
{
"name": "Python Container",
"dockerComposeFile": ["../../docker-compose.yml"],
"service": "python-api",
"shutdownAction": "none",
"workspaceFolder": "/workspace/python-src"
}
接下来,您可以通过更改workspaceFolder
来设置./devcontainer/node-container/devcontainer.json
以进行Node.js开发。
{
"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
文件:
version: '3'
services:
python-api:
volumes:
- ~:~/local-home-folder:cached # Additional bind mount
# ...
node-app:
volumes:
- ~/some-folder:~/some-folder:cached # Additional bind mount
# ...
两个.devcontainer.json
文件将更新如下:
"dockerComposeFile": [
"../../docker-compose.yml",
"../../docker-compose.devcontainer.yml",
]
此组合文件列表在启动容器时使用,因此在每个devcontainer.json
中引用不同的文件可能会产生意外结果。