Windows 上使用 VSCode + WSL2 + Docker 的 Git + SSH 密钥问题

问题描述

在过去的几周里,我在谷歌上搜索并对此进行了大量试验,但似乎无法找到正确的组合来使其发挥作用。

我使用的是 Windows 10,并且正在将 VSCode 与 Docker 和 WSL2 结合使用。在我的一生中,我无法让 git + ssh 密钥正常工作,以便我可以在 Docker 容器中进行推送和拉取操作。

在 WSL2 上使用 Windows 终端应用程序和 Ubuntu 20.04 工作正常。我从 Windows 端复制了我的 SSH 密钥并适当地更改了权限,那里没有问题。

在我使用 Docker Compose 的项目中,我尝试使用卷 internal class Testviewmodel { private bool isInitialized; public Command TestCommand { get; } public Testviewmodel() { Task.Run(() => { Thread.Sleep(5000); isInitialized = true; Debug.WriteLine($">>> Initialized: {isInitialized}"); TestCommand.ChangeCanExecute(); }); TestCommand = new Command(() => { Debug.WriteLine(">>> Command invoked."); },() => isInitialized); } } ,但此配置的问题是 (~/.ssh:/root/.ssh) 目录中所有内容的所有者变为 1000:1000,当我尝试要执行任何 git 操作,我会收到一条消息:

.ssh

我也试过没有那个音量并使用 ssh 代理转发,如 VSCode 文档中所述,但是当我尝试这样做时,当我尝试拉取或推送时,我从 github 获得了拒绝许可。

有没有人有幸让这个工作?从终端执行我的所有 git 命令并不是什么大不了的事,但是能够从 Docker 容器内成功执行它肯定会很方便。

解决方法

/root/.ssh/config 表示您的容器需要使用 USER root 运行,而不是默认用户 1000:1000。

如果可能的话,我建议:

  • 如果可能的话,构建您自己的映像,在其中定义用户 ID/组以匹配您的本地用户 ID/组。
  • 将您的 ssh 文件夹挂载到容器 ~user/.ssh 路径

这样,容器的内部 id/group 将与外部主机用户 id/group 匹配,并且可以从容器内部读取 SSH 文件。