使用 Linux 进行远程开发
Linux 是一个高度多样化的环境,服务器、容器和桌面发行版数量众多,因此很难确定哪些是受支持的。Visual Studio Code 远程开发对于您将要连接到的特定主机 / 容器 / WSL 发行版有相应的先决条件。
以下扩展在连接到以下版本的最新稳定版/LTS 版本时已知可正常工作:
- Ubuntu 64-bit x86, ARMv8l (AArch64) (20.04+)
- Debian 64-bit x86, ARMv8l (AArch64) (Buster/10+)
- Raspberry Pi OS ARMv7l (AArch32) 32-bit (Buster/10+) (此前称为 Raspbian)
- CentOS / RHEL 64-bit x86 (8+)
- Alpine Linux 64-bit x86 容器或 WSL 主机 (3.16+) (在 Dev Containers, WSL 中)
以下非 Linux SSH 主机也受支持:
- Windows 10/11 / Server 2016/2019 SSH 主机 (1803+) 使用 官方 OpenSSH Server。
- macOS 10.14+ (Mojave) SSH 主机,需启用远程登录。
然而,如果您使用的是非标准配置或 Linux 的下游发行版,可能会遇到问题。本文档提供了有关要求的信息以及一些建议,即使您的配置仅由社区支持,也可以帮助您顺利上手。
请注意,其他扩展可能存在此处未列出的依赖项。某些扩展还包含编译后的原生代码,可能无法在 Alpine Linux、ARMv7 (AArch32) 或 ARMv8 (AArch64) 上运行。因此,这些平台目前被视为处于“预览”阶段。如果您遇到仅在特定扩展中出现的问题,请联系扩展作者以获取有关其原生依赖项的信息。
本地 Linux 先决条件
如果您在本地运行 Linux,大多数要求由 VS Code 先决条件驱动。
此外,特定的远程开发扩展还有更多要求:
- Remote - SSH:
ssh需要在路径中。Shell 二进制文件通常位于openssh-client软件包中。 - Dev Containers: Docker CE/EE 18.06+ 和 Docker Compose 1.21+。请遵循您所在发行版的 Docker CE/EE 官方安装说明。如果您使用 Docker Compose,也请遵循 Docker Compose 安装指南。(请注意,Ubuntu Snap 软件包不受支持,且各发行版中的软件包版本可能过旧。)
docker和docker-compose也必须在路径中。但是,如果您使用远程主机,则无需运行 Docker。您可以在 Dev Containers 文档中了解更多配置 Docker 的方法。
远程主机 / 容器 / WSL Linux 先决条件
平台先决条件主要取决于每个远程终端自动安装的服务器组件所使用的 Node.js 运行时版本(以及延伸的 V8 JavaScript 引擎)。该服务器还有一组相关的原生 Node 模块,需要针对每个目标进行编译和测试。鉴于这些要求,64 位 x86 基于 glibc 的 Linux 发行版目前提供了最佳支持。
对于 ARMv7l (AArch32) / ARMv8l (AArch64) 基于 glibc 的主机、容器或 WSL,以及 64 位 x86 基于 musl 的 Alpine Linux,您可能会在使用某些具有原生依赖项的扩展时遇到问题。对于 ARMv7l/ARMv8l,扩展可能仅在其包中包含原生模块或运行时的 x86_64 版本。对于 Alpine Linux,包含的原生代码或运行时可能会因 Alpine Linux (musl) 与其他发行版 (glibc) 实现 libc 的方式存在根本差异而无法工作。在上述两种情况下,扩展程序需要通过编译/包含针对这些额外目标的二进制文件来支持这些平台。如果您遇到无法按预期工作的扩展,请向相应的扩展作者提出问题并请求支持。
| 分布 | 基础要求 | Remote - SSH 要求 | 备注 |
|---|---|---|---|
| 通用 | 内核 >= 4.18, glibc >=2.28, libstdc++ >= 3.4.25, tar | OpenSSH server, bash, 以及 curl 或 wget |
运行 ldd --version 以检查 glibc 版本。运行 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 查看是否具备 libstdc++ 3.4.25。 |
| Arm32 通用要求 | libatomic1 |
无额外要求。 | |
| Ubuntu 20.04+, Debian 10+, Raspberry Pi OS Buster/10+ 及下游发行版 | libc6 libstdc++6 ca-certificates tar |
openssh-server bash 和 curl 或 wget |
要求内核 >= 4.18, glibc >= 2.28, libstdc++ >= 3.4.25。 |
| RHEL / CentOS 8+ | glibc libgcc libstdc++ ca-certificates tar |
openssh-server bash 和 curl 或 wget |
要求内核 >= 4.18, glibc >= 2.28, libstdc++ >= 3.4.25。 |
| Alpine Linux 3.16+ | musl libgcc libstdc++。musl >= 1.2.3,不需要 glibc。 |
尚不支持。 | 在 Dev Containers 和 WSL 中受支持。由于扩展原生代码中的 glibc 依赖,安装在容器内的扩展可能无法工作。 |
| openSUSE Leap / SUSE Linux Enterprise 15+ | glibc libgcc_s1 libstdc++6 ca-certificates gzip tar |
curl 或 wget |
要求内核 >= 4.18, glibc, libstdc++6 |
各 Linux 发行版的使用建议
以下是发行版列表及可能缺失的任何基础要求。已终止支持(EOL)的发行版版本未包含在内。
- ✅ = 可用
- ⚠️ = 可用,但请参阅注意事项了解限制
- 🔬 = 实验性
- 🛑 = 不支持,但有变通方案
- ❌ = 不支持
| 服务器发行版 | Docker 镜像 | 缺失的库 | 备注 / 附加步骤 |
|---|---|---|---|
| ⚠️ Alpine Linux 3.16 (64-bit) | alpine:3.16 |
libgcc libstdc++ |
仅在 Dev Containers 和 WSL 中受支持。由于扩展原生代码中的 glibc 依赖,安装在容器内的部分扩展可能无法工作。 |
| ✅ CentOS 8 Server (64-bit) | centos:8 |
<无> | <无> |
| ❌ CentOS 7 Server (64-bit) | centos:7 |
glibc >= 2.28, libstdc++ >= 3.4.25 |
<无> |
| ✅ Debian 10 Server (64-bit) | debian:10 |
<无> | <无> |
| ❌ Debian 9 Server (64-bit) | debian:9 |
glibc >= 2.28, libstdc++ >= 3.4.25 |
<无> |
| ✅ openSUSE Leap Server 15 (64-bit) | opensuse/leap:15 |
Docker 镜像缺失 tar 和 gzip。 |
<无> |
| ✅ Oracle Linux 8 (64-bit) | oraclelinux:8 |
<无> | <无> |
| ❌ Oracle Linux 7 (64-bit) | oraclelinux:7 |
glibc >= 2.28, libstdc++ >= 3.4.25。Docker 镜像缺失 tar。 |
<无> |
| ⚠️ Raspberry Pi OS Buster/10 (ARMv7l 32-bit) | <n/a> | <无> | 某些扩展在安装于 ARMv7l 主机时可能无法工作,原因在于扩展使用了 x86 原生代码。Dev Containers 确实支持连接到 ARM 主机上的容器。 |
| ✅ RedHat Enterprise Linux 8 (64-bit) | <无> | <无> | |
| ❌ RedHat Enterprise Linux 7 (64-bit) | glibc >= 2.28, libstdc++ >= 3.4.25 |
<无> | |
| ✅ SUSE Linux Enterprise Server 15 (64-bit) | Docker 镜像缺失 tar 和 gzip。 |
<无> | |
| ✅ Ubuntu Server 20.04 (64-bit) | ubuntu:20.04 |
<无> | <无> |
| ❌ Ubuntu Server 18.04 (64-bit) | ubuntu:18.04 |
glibc >= 2.28 |
<无> |
问题或反馈
- 请参阅提示与技巧或常见问题解答。
- 在 Stack Overflow 上搜索。
- 添加功能请求或报告问题。
- 创建开发容器模板或特性供他人使用。
- 为我们的文档或VS Code 本身做出贡献。
- 请参阅我们的贡献指南了解详细信息。