附加到正在运行的容器

Visual Studio Code 可以为您创建并启动容器,但这可能不符合您的工作流程,您可能更喜欢将 VS Code“附加”到已经运行的 Docker 容器上——无论它最初是如何启动的。附加后,您可以像使用 devcontainer.json 在容器中打开文件夹时一样,安装扩展、编辑代码和进行调试。

附加到 Docker 容器

要附加到 Docker 容器,请从命令面板(F1)中选择 Dev Containers: Attach to Running Container...(Dev Containers:附加到正在运行的容器...),或者使用活动栏中的 Remote Explorer(远程资源管理器),然后在 Containers(容器)视图中,对想要连接的容器选择 Attach to Container(附加到容器)内联操作。

Containers Explorer screenshot

注意: 当使用 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 或其他已连接工具的进程中:noneinteractiveShellloginShellloginInteractiveShell(默认)。使用的特定 shell 基于用户的默认 shell(通常是 bash)。例如,bash 交互式 shell 通常会包含 /etc/bash.bashrc~/.bashrc 中设置的变量,而登录 shell 通常包含 /etc/profile~/.profile 中的变量。将此属性设置为 loginInteractiveShell 将从所有四个文件中获取变量。
postAttachCommand 字符串,
数组
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 集群中的容器尚不支持已附加容器的配置文件。

Attach to Kubernetes Container

后续步骤

© . This site is unofficial and not affiliated with Microsoft.