docker login

読む時間の目安: 2 分

説明

Docker Registry にログインします。

利用方法

$ docker login [オプション] [SERVER]

本コマンドの利用例については、以下に示す 利用例の節 を参照してください。

オプション

名前/省略形 デフォルト 説明
--password , -p パスワード。
--password-stdin 標準入力からパスワードを指定します。
--username , -u ユーザー名。

利用例

独自レジストリへのログイン

独自にホスティングしているレジストリにログインする場合は、サーバー名を指定します。

$ docker login localhost:8080

STDIN からのパスワード入力

docker loginコマンドを非対話的に実行する場合には--password-stdinフラグを使ってSTDINからパスワードを入力するようにします。 STDINを利用すれば、パスワードがシェル履歴やログファイルに残る心配がありません。

以下の例はパスワードをファイルから読み込んで、これをSTDIN経由でdocker loginコマンドに受け渡します。

$ cat ~/my_password.txt | docker login --username foo --password-stdin

特権ユーザー

docker loginsudoとともに実行するか、あるいはrootになることが必要です。 ただし以下のような例外もあります。

  1. リモートデーモン、たとえばdocker-machineによって実現されたdocker engineに接続する場合。
  2. dockerグループに所属するユーザーを用いた場合。 ただしこれはシステムセキュリティ上、重大な影響を及ぼします。 というのもdockerグループはrootに等しいからです。 詳しくは Docker デーモンの攻撃領域 を参照してください。

資格情報を有していれば、どのような公開またはプライベートリポジトリであってもログインできます。 ログインすることによって、資格情報は Linux の場合は$HOME/.docker/config.jsonに、Windows の場合は%USERPROFILE%/.docker/config.jsonに保存されます。 その際の処理手順は以降に示しています。

資格情報ストア

Docker Engine においてユーザーの資格情報は、オペレーティングシステムのネイティブなキーチェーンのように、外部の資格情報ストア(credentials store)に保存することができます。 資格情報ストアを利用すれば、Docker 設定ファイル内に資格情報を保存することに比べれば、はるかに安全です。

資格情報ストアを利用するには、所定のキーチェーンや外部ストアとのやりとりを行うための外部ヘルパープログラムを必要とします。 Docker ではそのヘルパープログラムを、クライアントホストの$PATHに置きます。

以下の一覧は、現時点において利用可能な資格情報ヘルパープログラムとそのダウンロード先を示すものです。

  • D-Bus Secret Service: https://github.com/docker/docker-credential-helpers/releases
  • Apple macOS キーチェーン: https://github.com/docker/docker-credential-helpers/releases
  • Microsoft Windows Credential Manager: https://github.com/docker/docker-credential-helpers/releases
  • pass: https://github.com/docker/docker-credential-helpers/releases

資格情報ストアの設定

資格情報ストアの設定は$HOME/.docker/config.jsonにおいて行い、docker engine がこれを利用するようにします。 設定プロパティの値には、利用するプログラム名をサフィックスにつけることが必要です。 (つまりdocker-credential-の後ろにつけます。) たとえばdocker-credential-osxkeychainを用いるには以下のようにします。

{
  "credsStore": "osxkeychain"
}

現時点においてログインしているなら、資格情報をファイルから削除するためにいったんログアウトし、docker loginにより再度ログインします。

デフォルト動作

デフォルトにおいて Docker は、それぞれのプラットフォームにおけるネイティブな実行バイナリを利用します。 つまり macOS であれば「osxkeychain」、Windows なら「wincred」、Linux なら「pass」です。 特別な例として Linux においては「pass」バイナリが見つからなかった場合、「secretservice」バイナリが用いられます。 そしていずれのバイナリも存在しなかった場合は、上で説明したように資格情報(パスワードなど)は base64 エンコーディングによって設定ファイルに保存されます。

資格情報ヘルパーのプロトコル

資格情報ヘルパー(credential helpers)は、非常にシンプルなプロトコルに基づいたプログラムまたはスクリプトです。 このプロトコルは Git に大きく影響を受けていますが、ただし情報を共有する方法に違いがあります。

ヘルパープログラムのコマンドでは、第一引数が必ずアクションを表わします。 そして取り得る値はstoregeteraseの 3 つに限られます。

コマンドstoreは、標準入力から JSON データ本体を受けつけます。 このデータからサーバーアドレスを送信して、資格情報、ユーザー名、そしてパスワードかアイデンティティトークンのいずれかを識別します。

{
  "ServerURL": "https://index.docker.io/v1",
  "Username": "david",
  "Secret": "passw0rd1"
}

保持されている機密情報がアイデンティティトークンである場合、Username には<token>を設定する必要があります。

storeコマンドでは docker engine に問題が発生した場合にはSTDOUTにエラーメッセージ出力を行います。

getコマンドは標準入力から文字列情報を取得します。 このデータから、docker engine が資格情報を削除したいサーバーアドレスを送信します。 以下はhttps://index.docker.io/v1に向けた JSON データ本体の例です。

getコマンドは JSON データ本体をSTDOUTに出力します。 Docker はこのデータからユーザー名とパスワードを読み込みます。

{
  "Username": "david",
  "Secret": "passw0rd1"
}

eraseコマンドはSTDINから文字列情報を取得します。 このデータから、docker engine が資格情報を削除したいサーバーアドレスを送信します。 以下はhttps://index.docker.io/v1に向けた JSON データ本体の例です。

eraseコマンドでは docker engine に問題が発生した場合にはSTDOUTにエラーメッセージ出力を行います。

資格情報ヘルパー

資格情報ヘルパー(credential helpers)は、前述の資格情報ストアに似ています。 ただし異なる点は、特定のレジストリ において資格情報を取り扱うように設計されたプログラムであるということです。 デフォルトの資格情報ストア(credsStoreまたは設定ファイルそのもの)は、その特定のレジストリに対しての資格情報処理においては利用されません。

資格情報ヘルパーの設定

すでにログインしている場合は、docker logoutを実行し、デフォルトの資格情報ストアから資格情報を削除しておきます。

資格情報ヘルパーの指定はcredsStoreの指定と同様に行います。 ただし一度に複数のヘルパーを設定することができます。 キーによってレジストリドメインを指定し、値によって利用するプログラムのサフィックス(つまりdocker-credential-の後ろに続くもの)を指定します。 たとえば以下のとおりです。

{
  "credHelpers": {
    "registry.example.com": "registryhelper",
    "awesomereg.example.org": "hip-star",
    "unicorn.example.io": "vcbait"
  }
}

上位コマンド

コマンド 説明
docker Docker CLI の基本コマンド