连接到正在运行的容器
Visual Studio Code 可以为您创建和启动容器,但这可能不符合您的工作流程,您可能更喜欢将 VS Code "连接" 到一个已经运行的 Docker 容器 - 无论它是如何启动的。连接后,您可以安装扩展、编辑和调试,就像您使用 devcontainer.json 在容器中打开文件夹时一样。
连接到 Docker 容器
要连接到 Docker 容器,您可以从命令面板 (F1) 中选择 开发容器:连接到正在运行的容器...,或者使用活动栏中的 远程资源管理器,从 容器 视图中,在要连接的容器上选择 连接到容器 内联操作。
注意: 使用 Alpine Linux 容器时,一些扩展可能无法正常工作,因为扩展中的本机代码存在
glibc
依赖项。
连接的容器配置文件
VS Code 支持图像或容器名称级别的配置文件,以便在您重复连接到给定 Docker 容器时加快设置速度。连接后,无论何时打开文件夹、安装扩展 或 转发端口,本地图像特定的配置文件都会自动更新以记住您的设置,以便在您再次连接时,一切恢复到正确的位置。
-
默认情况下,使用 图像级别 配置。要查看或更新连接后的配置,请从命令面板 (F1) 中选择 开发容器:打开容器配置文件。
-
如果您希望将配置绑定到 容器名称,请在连接后从命令面板 (F1) 中选择 开发容器:打开命名配置文件。从此时起,任何更新都将应用于此名称级别的配置,而不是在图像级别。
这两个文件都支持 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) 中选择 开发容器:打开连接的容器配置文件...,然后从提供的列表中选择图像/容器名称。
最后,如果您想要安装一些无论连接到哪个容器都应该安装的扩展,您可以更新 settings.json
以指定 始终安装的扩展 列表。
连接的容器配置参考
连接的容器配置文件类似于 devcontainer.json,并支持其属性的一个子集。
属性 | 类型 | 描述 |
---|---|---|
workspaceFolder |
字符串 | 设置 VS Code 在连接到容器时应打开的默认路径(这通常是容器中源代码所在卷挂载的路径)。默认情况下未设置(将打开一个空窗口)。 |
extensions |
数组 | 一个扩展 ID 数组,用于指定在创建容器时应在容器内部安装的扩展。默认值为 [] 。 |
settings |
对象 | 将默认 settings.json 值添加到容器/机器特定的设置文件中。 |
forwardPorts |
数组 | 应从容器内部转发到本地机器的端口列表。 |
portsAttributes |
对象 | 一个对象,它将端口号、"host:port" 值、范围或正则表达式映射到一组默认选项。有关可用选项,请参阅 端口属性。例如"portsAttributes": {"3000": {"label": "应用程序端口"}} |
otherPortsAttributes |
对象 | 未使用 portsAttributes 配置的端口、端口范围和主机的默认选项。有关可用选项,请参阅 端口属性。例如"otherPortsAttributes": {"onAutoForward": "silent"} |
remoteEnv |
对象 | 一组键值对,用于设置或覆盖 VS Code 的环境变量(或终端等子进程),但不会覆盖整个容器。可以在值中引用环境变量和 预定义变量。 例如: "remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" } |
remoteUser |
字符串 | 覆盖 VS Code 在容器中运行的用户(以及终端、任务或调试等子进程)。默认值为整个容器运行的用户(通常为 root )。 |
userEnvProbe |
枚举 | 指示用于 "探测" 用户环境变量以包含在 VS Code 或其他连接的工具进程中的 shell 类型:none 、interactiveShell 、loginShell 或 loginInteractiveShell (默认)。使用的具体 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...**。或者,先安装 Kubernetes 扩展 和 kubectl
以及 Dev Containers 扩展。然后从活动栏中选择 Kubernetes 资源管理器,展开要连接的容器所在的集群和 Pod。最后,右键单击该容器,从上下文菜单中选择 **Attach Visual Studio Code**。
注意: 尚未支持 Kubernetes 集群中的容器的附加容器配置文件。
后续步骤
- 创建 Dev Container - 为您的工作环境创建自定义容器。
- 高级容器 - 查找高级容器场景的解决方案。
- devcontainer.json 参考 - 查看
devcontainer.json
架构。