Docker Login してあるかどうか確認する方法

Docker を使った開発案件をやっていると、デフォルトの DockerHub ではなく、AWS とか OCI とかのクラウドベンダ上に作ったプライベート Docker レジストリに、プライベートな Docker イメージを Push したい場合がある。

その場合は、だいたい以下のような感じで docker login コマンドを叩いて、それから docker push をしていくことになる。

# OCI (Oracle Cloud)
$ echo 'PASSWORD' | docker login iad.ocir.io -u 【Tenant Name】/【User Name】 --password-stdin

# AliYun (Alibaba Cloud)
$ echo 'PASSWORD' | docker login registry-intl.ap-northeast-1.aliyuncs.com --username=【User Name】@【Tenant】 --password-stdin

# AWS ECR
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 【Account ID】.dkr.ecr.ap-northeast-1.amazonaws.com

色んな作業をしていると、「あれ?docker login ってしてあるっけ?」と分からなくなることがある。素直に再度 docker login コマンドを叩いてログインしてしまうのが一番良いのだが、他に確認方法はないのかと調べてみた。

docker login 済かどうかを確認するには、以下のように ~/.docker/config.json ファイルを覗くと良さそうだ。

$ jq < "${HOME}/.docker/config.json"
{
  "auths": {
    "000000000000.dkr.ecr.ap-northeast-1.amazonaws.com": {}
  },
  "credsStore": "desktop"
}

そうするとこんな感じで、auths プロパティ内にログインしたレジストリ (ココでは Amazon ECR) が確認できる。

$ jq -r < "${HOME}/.docker/config.json" '.auths | keys[]'

こんな風にするとキーの部分だけ列挙できるかな。