附加到正在运行的容器

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

{
  // 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 :打开附加的容器配置文件...,然后从中选择映像/容器名称所呈现的列表。

最后,如果您想要安装扩展,无论附加到哪个容器,您都可以更新以指定应始终安装的扩展settings.json列表。

附容器配置参考

附加的容器配置文件类似于devcontainer.json并且支持其属性的子集。

财产 类型 描述
workspaceFolder 细绳 设置连接到容器时 VS Code 应打开的默认路径(通常是可以在容器中找到源代码的卷安装路径)。默认情况下未设置(打开一个空窗口)。
extensions 大批 扩展 ID 数组,指定创建容器时应安装在容器内的扩展。默认为[].
settings 目的 将默认settings.json值添加到容器/机器特定的设置文件中。
forwardPorts 大批 应从容器内部转发到本地计算机的端口列表。
portsAttributes 目的 将端口号、"host:port"值、范围或正则表达式映射到一组默认选项的对象。有关可用选项,请参阅端口属性。例如:
"portsAttributes": {"3000": {"label": "Application port"}}
otherPortsAttributes 目的 未使用 .config 配置的端口、端口范围和主机的默认选项portsAttributes。有关可用选项,请参阅端口属性。例如:
"otherPortsAttributes": {"onAutoForward": "silent"}
remoteEnv 目的 一组名称/值对,用于设置或覆盖 VS Code(或终端等子进程)的环境变量,但不设置或覆盖整个容器。值中可以引用环境变量和预定义变量。
例如:"remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }
remoteUser 细绳 覆盖 VS Code 在容器中运行的用户(以及终端、任务或调试等子进程)。默认为整个容器运行的用户(通常root)。
userEnvProbe 枚举 指示用于“探测”用户环境变量以包含在 VS Code 或其他连接工具的进程中的 shell 类型: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 集群中的容器,请首先安装Kubernetes 扩展以及kubectlDev Containers 扩展。然后从活动栏中选择 Kubernetes 资源管理器,展开要附加的容器所在的集群和 Pod。最后,右键单击容器并从上下文菜单中选择“附加 Visual Studio Code”

注意: Kubernetes 集群中的容器尚不支持附加容器配置文件。

附加到 Kubernetes 容器

下一步