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

注意: 当使用 Alpine Linux 容器时,某些扩展可能无法工作,因为扩展内部的本地代码存在
glibc依赖项。
已附加容器的配置文件
VS Code 支持针对镜像或容器名称级别的配置文件,以加快重复连接到特定 Docker 容器时的设置速度。附加后,每当您打开一个文件夹、安装扩展或转发端口时,都会自动更新一个本地特定于镜像的配置文件以记住您的设置,这样当您再次附加时,一切都会回到原位。
-
默认情况下,将使用“镜像级别”的配置。附加后,要查看或更新它,请从命令面板(F1)中选择“Dev Containers: Open Container Configuration File”(Dev Containers:打开容器配置文件)。
-
如果您希望将配置与“容器名称”关联,请在附加后从命令面板(F1)中选择“Dev Containers: Open Named Configuration File”(Dev Containers:打开命名配置文件)。从这一点开始的任何更新将应用于此名称级别的配置,而不是镜像级别。
这两个文件都支持 `devcontainer.json` 属性的子集
{
// Default path to open when attaching to a new container.
"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",
// Set environment variables for VS Code and sub-processes
"remoteEnv": { "MY_VARIABLE": "some-value" }
}
请参阅已附加容器配置参考以获取属性及其用法的完整列表。
保存后,当您第一次使用相同的镜像/容器名称打开容器时,将使用这些属性来配置环境。
提示: 如果您的配置有问题,您也可以在未附加到容器时进行编辑,方法是从命令面板(F1)中选择“Dev Containers: Open Attached Container Configuration File...”(Dev Containers:打开已附加容器配置文件...),然后从出现的列表中选择镜像/容器名称。
最后,如果您有希望无论附加到哪个容器都安装的扩展,可以更新 `settings.json` 来指定一个始终安装的扩展列表。
已附加容器配置参考
已附加容器的配置文件类似于 devcontainer.json,并支持其属性的子集。
| 属性 | 类型 | 描述 |
|---|---|---|
workspaceFolder |
字符串 | 设置 VS Code 连接到容器时应打开的默认路径(通常是源代码在容器中找到的卷挂载的路径)。默认未设置(将打开一个空窗口)。 |
extensions |
数组 | 一个扩展 ID 数组,指定在创建容器时应安装在容器内的扩展。默认为 `[]`。 |
settings |
对象 | 将默认的 `settings.json` 值添加到特定于容器/计算机的设置文件中。 |
forwardPorts |
数组 | 应从容器内部转发到本地机器的端口列表。 |
portsAttributes |
对象 | 一个对象,将端口号、`"host:port"` 值、范围或正则表达式映射到一组默认选项。有关可用选项,请参阅端口属性。例如"portsAttributes": {"3000": {"label": "Application port"}} |
otherPortsAttributes |
对象 | 未通过 `portsAttributes` 配置的端口、端口范围和主机的默认选项。有关可用选项,请参阅端口属性。例如"otherPortsAttributes": {"onAutoForward": "silent"} |
remoteEnv |
对象 | 一组名称-值对,用于设置或覆盖 VS Code(或子进程,如终端)的环境变量,但不会影响整个容器。可以在值中引用环境变量和预定义变量。 例如:`"remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }` |
remoteUser |
字符串 | 覆盖 VS Code 在容器中运行的用户(包括终端、任务或调试等子进程)。默认为容器整体运行的用户(通常是 `root`)。 |
userEnvProbe |
enum | 指示用于“探测”用户环境变量的 shell 类型,以便将其包含在 VS Code 或其他连接工具的进程中:`none`、`interactiveShell`、`loginShell` 或 `loginInteractiveShell`(默认)。使用的具体 shell 基于用户的默认 shell(通常是 bash)。例如,bash 交互式 shell 通常会包含在 `/etc/bash.bashrc` 和 `~/.bashrc` 中设置的变量,而登录 shell 通常包含来自 `/etc/profile` 和 `~/.profile` 的变量。将此属性设置为 `loginInteractiveShell` 将获取所有四个文件的变量。 |
postAttachCommand |
string, 数组 |
在 VS Code 附加到容器后运行的命令字符串或命令参数列表。在字符串中使用 `&&` 执行多个命令。例如,`"yarn install"` 或 `"apt-get update && apt-get install -y curl"`。数组语法 `["yarn", "install"]` 将直接调用命令(在此情况下为 `yarn`),而无需使用 shell。默认未设置。 请注意,数组语法将不使用 shell 执行命令。您可以了解更多关于格式化字符串与数组属性的信息。 |
已附加容器配置中的变量
在已附加配置文件的某些字符串值中,可以使用以下格式的变量:**${variableName}**。下表是可用的变量列表,您可以根据需要使用。
| 变量 | 属性 | 描述 |
|---|---|---|
${containerEnv:VAR_NAME} |
remoteEnv |
容器内现有环境变量(在此情况下为 `VAR_NAME`)的值,一旦容器启动并运行。例如:`"remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }` |
附加到 Kubernetes 集群中的容器
要附加到 Kubernetes 集群中的容器,请从命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中选择“Dev Containers: Attach to Running Kubernetes Container...”(Dev Containers:附加到正在运行的 Kubernetes 容器...)。或者,首先安装 Kubernetes 扩展和 `kubectl` 以及 Dev Containers 扩展。然后,从活动栏中选择 Kubernetes 资源管理器,并展开您要附加的容器所在的集群和 Pod。最后,右键单击容器,然后从上下文菜单中选择“Attach Visual Studio Code”(附加 Visual Studio Code)。
注意: 对于 Kubernetes 集群中的容器,目前尚不支持已附加容器的配置文件。

后续步骤
- 创建 Dev Container - 为您的工作环境创建自定义容器。
- 高级容器 - 查找高级容器场景的解决方案。
- devcontainer.json 参考 - 查看
devcontainer.json模式。