common

docker in docker だと osxkeychain が見つからないエラーが出る

docker compose up をした際に次のエラーが出る

error getting credentials - err: exec: "docker-credential-osxkeychain": executable file not found in $PATH, out:

~/.docker/config.json に “credsStore”: “osxkeychain” が記載されているので出る。 mac環境では brew install docker-credential-helpers でインストールできるが docker in docker 内では見つからないしバイナリも提供されていない。 他の選択肢としては下記がある

  • docker-credential-pass(Linux ではこれが一般的)
  • docker-credential-secretservice(GNOME Keyring を利用) ~/.docker/config.json を修正:
{
│ "credsStore": "pass"
}

認証情報の保存場所

Docker はログイン時 (docker login …) に入力した認証情報を、 docker-credential-pass というヘルパープログラムを通じて保存します。 このヘルパーは Linux の pass (Password Store) を利用して、GPG で暗号化された状態で保存します。 つまり平文ではなく、~/.password-store/ に GPG 鍵で暗号化されて記録される docker-credential-pass が呼ばれて取得・削除・一覧を行う

初期されてないエラーが出る

Error saving credentials: error storing credentials - err: exit status 1, out: `pass not initialized: exec: "pass": executable file not found in $PATH:`
  • docker-credential-pass は見つかっている(/usr/bin/docker-credential-pass)
  • でも内部で呼ぶ pass コマンドが未インストール or 初期化されていない ため失敗

“credsStore”: “pass” を使うには、pass(Password Store)と GPG の初期化が必須です。以下を順にやれば直ります。

1) 必要ツールの導入

apt-get install -y pass gnupg pinentry-curses

2) GPG のキー作成(非対話・最短)

export GPG_TTY=$(tty)

# 1年有効の鍵をサクッと作る(名前やメールは任意の文字列でOK)
gpg --quick-generate-key "docker-pass <docker@example>" default default 1y

# KEYID を変数に取り出す
KEYID=$(gpg --list-secret-keys --keyid-format=long | awk '/^sec/{print $2}' | sed 's|.*/||' | head -n1)
echo "KEYID=$KEYID"