GPG の鍵を Dev Container 内で使用する#

Git の gpg 鍵を使用する場合、 Sharing GPG Keys に従って設定が必要になる。

WSL 上の Docker コンテナの場合#

  1. Windows 上への Gpg4win のインストール

    Gpg4win のホームページ からインストーラをダウンロードして、インストーラに沿ってインストールする。

  2. WSL 側の必要なソフトウェアのインストール

    ファイル共有元となる WSL のコンソールで、次のコマンドにより socat と gpg をインストールする。

    $ sudo apt update
    $ sudo apt install socat gpg
    

    Note

    最新のドキュメントでは socat のインストールが不要となっている。

  3. WSL 内の設定

    ファイル共有元となる WSL のコンソールで、次のコマンドを実行する。

    $ echo pinentry-program /mnt/c/Program\ Files\ \(x86\)/Gpg4win/bin/pinentry.exe > ~/.gnupg/gpg-agent.conf
    $ gpg-connect-agent reloadagent /bye
    
  4. Dev Container のコンテナ内の設定

    使用する Dev Container の Dockerfile などで次のようなコマンドで gnupg2 をインストールする。

    $ apt-get update && apt-get install gnupg2 -y
    

    Important

    参照したドキュメントによると、gpg でなく gnupg2 であることに意味があるようだ。

SSH 接続先の Linux 上の Docker コンテナの場合#

  1. Linux ホスト上に必要なソフトウェアのインストール

    ファイル共有元となる WSL のコンソールで、次のコマンドにより gnupg2 をインストールする。

    $ sudo apt update
    $ sudo apt install gnupg2
    
  2. Dev Container のコンテナ内の設定

    使用する Dev Container の Dockerfile などで次のようなコマンドで gnupg2 をインストールする。

    $ apt-get update && apt-get install gnupg2 -y
    

    Important

    参照したドキュメントによると、gpg でなく gnupg2 であることに意味があるようだ。

gpg のエラー#

次のようなエラーが出てコミットができないことがあった。

error: gpg failed to sign the data
fatal: failed to write commit object

WSL のコンソールを開いて以下のコマンドを実行すると何故か治った。

$ gpg-connect-agent killagent /bye
$ gpg-connect-agent /bye