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 login
はsudo
とともに実行するか、あるいはroot
になることが必要です。
ただし以下のような例外もあります。
- リモートデーモン、たとえば
docker-machine
によって実現されたdocker engine
に接続する場合。 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 に大きく影響を受けていますが、ただし情報を共有する方法に違いがあります。
ヘルパープログラムのコマンドでは、第一引数が必ずアクションを表わします。
そして取り得る値はstore
、get
、erase
の 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 の基本コマンド |