コンテナーと Git 認証情報を共有する

Dev Containers 拡張機能は、コンテナー内からローカルの Git 認証情報を使用するための標準サポートを提供します。このセクションでは、サポートされている 2 つのオプションについて説明します。

ローカルでユーザー名またはメールアドレスを設定していない場合は、設定するように求められることがあります。これを行うには、ローカルマシンで次のコマンドを実行します。

git config --global user.name "Your Name"
git config --global user.email "your.email@address"

拡張機能は、起動時にローカルの .gitconfig ファイルをコンテナーに自動的にコピーするため、コンテナー内でこれを行う必要はありません。

クレデンシャルヘルパーを使用する

HTTPS を使用してリポジトリをクローンし、ローカル OS でクレデンシャルヘルパーを設定している場合、追加のセットアップは必要ありません。ローカルで入力した認証情報はコンテナー内で再利用され、その逆も同様です。

SSH キーを使用する

クレデンシャルヘルパーの代わりに SSH キーを使用してリポジトリをクローンする場合もあります。このシナリオを有効にするために、拡張機能は、ローカルの SSH エージェントが実行されている場合は自動的に転送します。

まず、ホストでSSH エージェント転送が有効になっていることを確認する必要があります。sshd_config (通常は /etc/ssh/sshd_config または %programdata%\ssh\sshd_config にあります) で AllowAgentForwarding オプションを検索します。まだ設定されていない場合は、yes に設定し、sshd サービスをリロードまたは再起動する必要があります。

ローカルの SSH キーをエージェントに追加するには、ssh-add コマンドを使用します (エージェントが実行中の場合)。たとえば、ターミナルまたは 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 署名したい場合は、ローカルキーをコンテナーと共有することもできます。GPG キーを使用した署名については、GitHub のドキュメントを参照してください。

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 署名キーは Git Bash ではなく、Windows GUI または CLI (powershell/cmd) を使用して構成する必要があります。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) から Dev Containers: Rebuild Container を実行することで実行できます。次回コンテナーが起動すると、GPG キーもコンテナー内でアクセスできるようになります。

: 以前にコンテナーで gpg を使用していた場合は、更新を有効にするために Dev Containers: Rebuild Container を実行する必要がある場合があります。