将 Git 凭据与容器共享
Dev Containers 扩展提供开箱即用的支持,允许在容器内使用本地 Git 凭据。本节将介绍两种受支持的选项。
如果您没有在本地设置用户名或电子邮件地址,系统可能会提示您进行设置。您可以在 本地 计算机上运行以下命令来完成此操作
git config --global user.name "Your Name"
git config --global user.email "your.email@address"
扩展在启动时会自动将您的本地 .gitconfig
文件复制到容器中,因此您不需要在容器本身中执行此操作。
使用凭据助手
如果您使用 HTTPS 克隆仓库,并且在本地操作系统中已配置 凭据助手,则无需进行进一步设置。您在本地输入的凭据将在容器中重复使用,反之亦然。
使用 SSH 密钥
在某些情况下,您可能使用 SSH 密钥而不是凭据助手来克隆仓库。为启用此场景,如果您的 本地 SSH 代理 正在运行,扩展将自动转发它。
首先,您应该确保在 主机 上启用了 SSH 代理转发。在 sshd_config 中(通常位于 /etc/ssh/sshd_config
或 %programdata%\ssh\sshd_config
)查找 AllowAgentForwarding
选项。如果尚未设置,您应将其设置为 yes
并重新加载或重启 sshd
服务。
如果 SSH 代理正在运行,您可以使用 ssh-add
命令将本地 SSH 密钥添加到代理中。例如,从终端或 PowerShell 运行此命令
ssh-add
它将添加默认文件(~/.ssh/id_rsa
、.ssh/id_dsa
、~/.ssh/id_ecdsa
、~/.ssh/id_ed25519
和 ~/.ssh/identity
)。如果您想指定一个密钥,只需在命令后附加其路径即可。
在 Windows 和 Linux 上,您可能会因为代理未运行而收到错误(macOS 通常默认运行)。请按照以下步骤解决问题
Windows:
启动一个 本地管理员 PowerShell 并运行以下命令
# Make sure you're running as an Administrator
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent
Linux
首先,通过在终端中运行以下命令在后台启动 SSH 代理
eval "$(ssh-agent -s)"
然后将这些行添加到您的 ~/.bash_profile
或 ~/.zprofile
(对于 Zsh)中,以便在登录时启动它
if [ -z "$SSH_AUTH_SOCK" ]; then
# Check for a currently running instance of the agent
RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
if [ "$RUNNING_AGENT" = "0" ]; then
# Launch a new instance of the agent
ssh-agent -s &> $HOME/.ssh/ssh-agent
fi
eval `cat $HOME/.ssh/ssh-agent` > /dev/null
ssh-add 2> /dev/null
fi
在最后一行,将 <your ssh key>
替换为您的特定 ssh 密钥。
例如 ssh-add $HOME/.ssh/id_ed25519 2> /dev/null
如果您遇到任何问题,您可能需要查看 Dev Containers 扩展的已知限制。
共享 GPG 密钥
如果您想使用 GPG 签署您的提交,您也可以将本地密钥与容器共享。您可以在 GitHub 文档中了解如何使用 GPG 密钥进行签名。
如果您尚未设置 GPG,可以为您的平台进行配置
- 在 Windows 上,您可以安装 Gpg4win。
- 在 macOS 上,您可以安装 GPG Tools。
- 在 Linux 上,请 在本地 使用系统包管理器安装
gnupg2
包。 - 在 WSL 上
- 在 Windows 端安装 Gpg4win。
- 在您的 WSL 发行版中安装
gpg
。sudo apt install gpg
- 在您的 WSL 发行版中注册
pinentry
GUI。echo pinentry-program /mnt/c/Program\ Files\ \(x86\)/Gpg4win/bin/pinentry.exe > ~/.gnupg/gpg-agent.conf
- 在 WSL 中重新加载
gpg
代理。gpg-connect-agent reloadagent /bye
注意:对于 Windows 用户,GPG 签名密钥必须使用 Windows GUI 或 CLI(PowerShell/CMD)进行配置,而不是在 Git Bash 中。Dev Container 无法访问在 Git Bash 中设置的 GPG 密钥,即使它位于您的
~/.gnupg/
文件夹中,并且可以在 Windows 资源管理器中访问。
接下来,通过更新 Dockerfile 在容器中安装 gnupg2
。
例如
RUN apt-get update && apt-get install gnupg2 -y
或者,如果以非 root 用户身份运行
RUN sudo apt-get update && sudo apt-get install gnupg2 -y
要应用配置更改,您需要重新构建容器。您可以通过从命令面板 (F1
) 运行 开发容器:重新构建容器 来完成此操作。下次容器启动时,您的 GPG 密钥也应该可以在容器内部访问。
注意:如果您之前在容器中使用了
gpg
,您可能需要运行 开发容器:重新构建容器 以使更新生效。