附加到正在运行的容器
Visual Studio Code 可以为您创建和启动容器,但这可能与您的工作流程不匹配,您可能更喜欢将 VS Code "附加"到已运行的 Docker 容器上 - 无论它是如何启动的。一旦附加,您就可以安装扩展、编辑和调试,就像您在容器中打开一个文件夹时一样,使用 devcontainer.json。
附加到一个Docker容器
要附加到Docker容器,请从命令面板(F1)中选择Dev Containers: 附加到运行中的容器...,或者使用活动栏中的远程资源管理器,从容器视图中,选择您要连接的容器上的附加到容器的内联操作。

注意: 当使用 Alpine Linux 容器时,由于
glibc扩展中原代码的依赖项。
附加的容器配置文件
VS Code 支持图像或容器名称级配置文件,以加快您重复连接到给定的Docker容器时的设置速度。一旦附加,每次打开文件夹时,安装一个扩展,或者转发一个端口,一个本地图像特定的配置文件将自动更新以记住您的设置,这样当您再次附加时,一切都会回到正确的位置。
-
默认情况下,使用图像级配置。附加后,要查看或更新它,请从命令面板(F1)中选择Dev Containers: 打开容器配置文件。
-
如果您更喜欢将配置绑定到一个容器名称,请在附加后从命令面板(F1)中选择Dev Containers: 打开命名配置文件。从这一点开始的任何更新将应用于此名称级别的配置,而不是在图像级别。
这两个文件都支持一个子集devcontainer.json属性:
{
// 默认附加到新容器时打开的路径。
"workspaceFolder": "/path/to/code/in/container/here",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.defaultProfile.linux": "bash"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["dbaeumer.vscode-eslint"],
// An array port numbers to forward
"forwardPorts": [8000],
// Container user VS Code should use when connecting
"remoteUser": "vscode",
// 为 VS Code 和子进程设置环境变量
"remoteEnv": { "MY_VARIABLE": "some-value" }
}
请参阅附加的容器配置参考,以获取完整的属性列表及其用途。
一旦保存,每次使用相同的镜像/容器名称首次打开容器时,这些属性将用于配置环境。
提示: 如果你的配置出了问题,你也可以在不连接到容器的情况下编辑它,通过在命令面板(F1)中选择Dev Containers: 打开已连接的容器配置文件... 并从呈现的列表中选择镜像/容器名称。
最后,如果您有不管连接到哪个容器都希望安装的扩展,请更新settings.json 以指定一个列表的 扩展应始终安装。
附加容器配置参考
附加的容器配置文件类似于devcontainer.json,并支持其部分属性。
| 财产 | 类型 | 描述 |
|---|---|---|
工作区文件夹 |
字符串 | 设置 VS Code 连接到容器时应打开的默认路径(通常是容器中可以找到源代码的卷挂载路径)。默认不设置(打开一个空Windows)。 |
扩展 |
数组 | 一个数组,用于指定在容器创建时应安装的扩展ID。默认为[]输入:. |
设置 |
对象 | 添加默认settings.json将值输入到容器/机器特定的设置文件中。 |
转发端口 |
数组 | 一个需要从容器内部转发到本地机器的端口列表。 |
端口属性 |
对象 | 对象映射端口号,"主机:端口" 值、范围或正则表达式到一组默认选项。请参阅 端口属性 了解可用选项。例如: "portsAttributes": {
"3000": {
"label": "应用端口"
}
} |
其他端口属性 |
对象 | 默认选项用于未通过配置的端口、端口范围和主机端口属性。查看端口属性了解可用选项。例如:"其他端口属性": {
"自动转发": "静音"
} |
远程环境 |
对象 | 一组名称-值对,用于为 VS Code(或终端等子进程)设置或覆盖环境变量,但不适用于整个容器。环境和预定义变量 可在值中引用。 例如: "remoteEnv": {
"PATH": "${containerEnv:PATH}:/some/other/path"
} |
远程用户 |
字符串 | 覆盖 VS Code 在容器中运行的用户(以及终端、任务或调试等子进程)。默认情况下,为容器整体运行的用户(通常为根)。 |
用户环境探测器 |
枚举 | 指示用于“探测”用户环境变量的 shell 类型,这些变量将被包含在 VS Code 或其他连接工具的进程 中:无,交互式壳,登录 shell,或登录交互式 shell(默认)。使用的具体 shell 是基于用户的默认 shell(通常是 bash)。例如,bash 交互式 shell 通常会包含在/etc/bash.bashrc和~/.bashrc登录 shell 通常包括变量从/etc/profile和~/.profile将此属性设置为登录交互式 shell将从所有四个文件中获取变量。 |
附加命令 |
字符串, 数组 |
在 VS Code 附加到容器后要运行的命令字符串或命令参数列表。使用&&在字符串中执行多个命令。例如,"yarn install"或"apt-get update && apt-get install -y curl"数组语法["yarn", "install"]将调用命令(在这种情况下纱线) 直接执行,不使用 shell。默认不设置。请注意,数组语法将在没有 shell 的情况下执行命令。您可以了解更多关于字符串格式化与数组属性的区别。 |
附加容器配置文件中的变量
变量可以在附加配置文件中的某些字符串值中引用,格式如下:${variableName}。以下表格列出了您可以使用的可用变量。
| 变量 | 属性 | 描述 |
|---|---|---|
${容器环境:VAR_NAME} |
远程环境 |
容器内现有环境变量的值(在这种情况下,变量名称) 一旦它开始运作。例如:"remoteEnv": {
"PATH": "${containerEnv:PATH}:/some/other/path"
} |
附加到 Kubernetes 集群中的容器
要附加到 Kubernetes 集群中的容器,请选择 Dev Containers: 附加到运行中的 Kubernetes 容器... 从命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P))。或者,首先安装 Kubernetes 扩展 和 kubectl 以及 Dev Containers 扩展。然后从活动栏中选择 Kubernetes 探索器,并展开包含您要附加的容器的集群和 Pod。最后,在容器上右键单击并从上下文菜单中选择 附加 Visual Studio Code。
注意: 目前,Kubernetes 集群中的容器不支持附加容器配置文件。

下一步
- 创建开发容器 - 为您的工作环境创建自定义容器。
- 高级容器 - 寻找高级容器场景的解决方案。
- devcontainer.json 参考 - 查看
devcontainer.json模式。