Docker login

Pocket

Docker login の覚書です。

Ref.

前提

Mac に Docker Desktop をインストールしていると仮定します。
Install Docker Desktop on Mac

config.json

docker コマンドの設定ファイルは $HOME/.docker/config.json です。
Mac はデフォルトで以下のように指定されています。

{
        "auths": {},
        "credsStore": "desktop"
}

資格証明ストア Credential store

資格証明ストアは config.json の credsStore プロパティで指定します。

credsStore プロパティは、デフォルトの資格証明ストア(credential store)として提供する外部バイナリを指定します。 このプロパティが設定されていない場合、docker login は、$PATH 上の docker-credential- によって指定されたバイナリに資格証明の保存を試みます。 このプロパティが設定されていない場合、資格証明は config の auths プロパティに保存されます。 詳細は docker login の 資格証明ストア の節 を参照してください。

ref. 設定ファイル

Mac に Docker Desktop は以下の資格証明ストア(credential store)を提供します。

  • desktop
    • docker-credential-desktop
  • ecr-login
    • docker-credential-ecr-login
  • gcloud
    • docker-credential-gcloud
  • osxkeychain
    • docker-credential-osxkeychain

デフォルトの挙動

デフォルトでは、Docker は各プラットフォームのネイティブなバイナリを探します。たとえば、 macOS であれば「osxkeychain」、Windows であれば「wincerd」、Linux であれば「pass」です。Linux では特別な状況で、Docker は「pass」バイナリが見つからない場合、「secretservice」を頼りにします。もしも、これらのバイナリが存在しなければ、先ほど記述した設定ファイル中に、 base64 エンコーディングした認証情報(例:パスワード)を保管します。

ref. デフォルトの挙動

Macの config.json は credsStore: desktop がデフォルトです。 desktop は docker-credential-desktop を使用します。
docker-credential-desktop の 最終的な資格証明情報は docker-credential-osxkeychain と同じでキーチェーンに保存されます。

ref. https://stackoverflow.com/questions/69802668/what-does-the-value-desktop-mean-for-the-credstore-attribute-in-docker-config

ログイン/ログアウト

Docker Hub( https://index.docker.io/v1 )

ログイン

// https://index.docker.io/v1 にログイン
$ doker login

ログインすると config.json の auths プロパティに追加します。

{
        "auths": {
                "https://index.docker.io/v1/": {}
        },
        "credsStore": "desktop"
}

資格情報はキーチェーンに保存します。

ログアウト

// https://index.docker.io/v1 からログアウト
$ docker logout

Removing login credentials for https://index.docker.io/v1/

ログアウトすると config.json の auths プロパティから削除します。

{
        "auths": {},
        "credsStore": "desktop"
}

資格情報をキーチェーンから削除します。

Amazon ECR

ECR は AWS CLI を使ってログインします。
Docker Hub の場合と同じように資格情報をキーチェーンに保存します。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

Amazon ECR にログインするフローです。

  1. aws ecr get-login-password –region ap-northeast-1 で 認証トークンを取得
  2. xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com にログインするために username AWS 、password に 1.で取得したトークンを標準入力として渡して docker login を発行

ログインすると config.json の auths プロパティに追加します。

{
        "auths": {
                "xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com": {}
        },
        "credsStore": "desktop"
}

資格情報はキーチェーンに保存します。
認証情報の有効期間は12時間です。

The authorization token is valid for 12 hours.

ref. get-login-password

Ref.

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。