docker login¶
使用例¶
標準入力を使ってパスワードを与える¶
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 デーモンが直面する攻撃 をご覧ください。
$HOME/.docker/config.json
に、Windows であれば %USERPROFILE%/.docker/config.json
に保管します。手順は以降で説明します。
認証情報の保存場所¶
Docker Engine はユーザの認証情報を外部の認証情報ストアに保存できます。外部の認証情報ストアとは、オペレーティング・システムに搭載するキーチェーン(keychain)です。Docker 設定ファイルに認証情報を保管するより、外部のストアを使う方が、より安全です。
認証情報ストアを使うには、キーチェーンや外部ストアと接続するための、外部のヘルパー・プログラムが必要です。Docker はクライアント・ホスト上の $PATH
にヘルパー・プログラムを必要とします。
こちらは現時点で利用可能な認証情報ヘルパー・プログラムと、ダウンロード先の一覧です。
D-Bus シークレット・サービス: https://github.com/docker/docker-credential-helpers/releases
Apple OS X キーチェーン: https://github.com/docker/docker-credential-helpers/releases
Microsoft Windows 資格情報マネージャ: 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 logout
を実行し、ファイルから認証情報を削除します。それから docker login
を再び実行します。
デフォルトの挙動¶
デフォルトでは、Docker は各プラットフォームのネイティブなバイナリを探します。たとえば、 macOS であれば「osxkeychain」、Windows であれば「wincerd」、Linux であれば「pass」です。Linux では特別な状況で、Docker は「pass」バイナリが見つからない場合、「secretservice」を頼りにします。もしも、これらのバイナリが存在しなければ、先ほど記述した設定ファイル中に、 base64 エンコーディングした認証情報(例:パスワード)を保管します。
認証情報ヘルパーのプロトコル¶
: ruby:認証情報ヘルパー <credential helper> は、どのようなプログラムやスクリプトでも扱える非常にシンプルなプロトコルです。このプロトコルは Git のアイディアに強く影響を受けていますが、情報を共有する仕組みは違います。
ヘルパーはコマンドのアクションを決めるため、常に1番めの引数を使います。ここで利用可能な引数とは store
get
erase
のいずれかです。
store
命令は標準入力の JSON ペイロードを取得します。ペイロードではサーバのアドレス、認証情報の指定、ユーザ名、パスワードあるいは識別用トークンを渡します。
{
"ServerURL": "https://index.docker.io/v1",
"Username": "david",
"Secret": "passw0rd1"
}
もしシークレット(訳者注:認証情報やトークンなどの秘密情報の意味)が識別用トークンを保管する場合、ユーザ名にあたる部分は <token>
がセットされます。
store
命令は何らかの問題が Docker Engine で発生したとき、 STDOUT
(標準出力に)エラーを表示できます。
get
命令は STDIN
(標準入力)からの文字列をペイロードとして読み込みます。Docker Engine が必要とする認証情報を持っているサーバのアドレスをペイロードで渡します。 https://index.docker.io/v1
はペイロードの例です。
get
命令は JSON ペイロードを STDOUT
(標準出力)に書き出します。Docker は、このペイロードからユーザ名とパスワードを読み込みます。
{
"Username": "david",
"Secret": "passw0rd1"
}
erase
命令は STDIN
(標準入力)からの文字列をペイロードとして読み込みます。Docker Engine が必要とする認証情報を持っているサーバのアドレスをペイロードで渡します。 https://index.docker.io/v1
はペイロードの例です。
store
命令は何らかの問題が Docker Engine で発生したとき、 STDOUT
(標準出力に)エラーを表示できます。
認証情報ヘルパー¶
credsStore
あるいは設定ファイル自身)を使いません。
認証情報ヘルパーの設定¶
既にログイン中の場合は、 docker logout
を実行し、デフォルトのストアから認証情報を削除します。
認証情報ヘルパーは credsStore
と似たような方法で指定しますが、同時に複数のヘルパーを設定できます。キーではレジストリのドメインを指定し、バリューではプログラムが使用する接頭句(例:すべて docker-credential-
に続きます)を指定します。以下は例です。
{
"credHelpers": {
"registry.example.com": "registryhelper",
"awesomereg.example.org": "hip-star",
"unicorn.example.io": "vcbait"
}
}