Docker と Windows (https://msdn.microsoft.com/ja-jp/virtualization/windowscontainers/deployment/docker_windows) というページに、このエラーの回避方法として docker daemon -D -H <ip address of Nano Server>:2375 でリモートからの接続を許可する方法が説明されていますが、実はこの日本語ページは古い (TP4 以前の内容)。
※ Windows Containers 関連の日本語ドキュメントは、更新日が英語ドキュメントと同じでも、内容は古いままという場合があるので注意してください。日本語ページの URL の ja-jp を en-us に変更して、内容が同じかどうか確認したほうがよいです。
Docker デーモンまわりは、TP5 で dockerから dockerd に変更になっていますし、dockerd を 2375 で動かそうとしても起こられます。
英語版の Docker and Windows (https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/docker_windows) は TP5 対応の内容になっているんですが、リモート接続の許可まわりがちょっと説明不足。
ちょっとだけ詳しく説明すると...
サーバー用の鍵 ca.pem、server-cert.pem、server-key.pem と、クライアント用の鍵 ca.pem、cert.pem、key.pem をがんばって準備して...
コンテナー ホストの C:\ProgramData\docker\certs.d (certs.d は作成する必要あり) に ca.pem、server-cert.pem、server-key.pem をコピーします。
通常の Windows Server 2016 なら、
PS> Stop-Service -Name Docker
PS> Start-Service -Name Docker
Nano Server なら、
PS> Get-Process dockerd | Stop-Process -Force
PS> Start-ScheduledTask -TaskName Docker
で Docker デーモンを再起動。Windows ファイアウォールで 2376/TCP を許可。
PS> netsh advfirewall firewall add rule name="Docker daemon" dir=in action=allow protocol=TCP localport=2376
クライアントでは、ユーザー プロファイル フォルダー (%USERPROFILE%) に .docker フォルダーを作成して、クライアント用の鍵 ca.pem、cert.pem、key.pem をコピーします。
PowerShell なら...
PS C:\Users\username> wget -uri https://aka.ms/tp5/docker -outfile .\docker.exe
PS C:\Users\username> $env:DOCKER_HOST = "tcp://X.X.X.X:2376"
PS C:\Users\username> $env:DOCKER_TLS_VERIFY = "1"
PS C:\Users\username> .\docker.exe run -it ....
コマンド プロンプトなら...
C:\Users\username> Set DOCKER_HOST=tcp://x.x.x.x:2376
C:\Users\username> Set DOCKER_TLS_VERIFY=1
C:\Users\username> .\docker.exe run -it ....
または、ちょっと面倒ですが...
C:\Users\username> docker --tlsverify --tlscacert=.docker\ca.pem --tlscert=.docker\cert.pem --tlskey=.docker\key.pem -H x.x.x.x:2376 run -it ....
でも OK。
鍵ファイルは、openssl で作成するんですが、その方法は以前に以下の投稿で説明したとおり。
Nano Server TP4 を Container Host にする (完全版) (2015/11/25)
Windows Server 2016 TP3 > Windows 版 Docker でリモート接続 (TLS) を有効化する (2015/08/24)
Windows 10 Insider Preview をお使いなら、Bash on Ubuntu on Windows の openssl を使えますよ。Bash on Ubuntu on Windows からは、cp *.pem /mnt/c/work とかで C: ドライブのパスに鍵をコピーできます。
pem ファイルの作り方、一応、メモっときます。
# openssl genrsa -aes256 -out ca-key.pem 4096
# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem (->ca.pem)
# openssl genrsa -out server-key.pem 4096 (->server-key.pem)
# openssl req -subj "/CN=<Docker ホストの FQDN>" -sha256 -new -key server-key.pem -out server.csr
# echo subjectAltName = IP:<Docker ホストの IP>;IP:127.0.0.1 > extfile.cnf
# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf (->server-cert.pem)
# openssl genrsa -out key.pem 4096 (->key.pem)
# openssl req -subj "/CN=<Docker クライアントの FQDN>" -new -key key.pem -out client.csr
# echo extendedKeyUsage = clientAuth > extfile.cnf
# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf (->cert.pem)
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。