現象
docker-machineにて環境構築すると以下のエラーが起きて環境構築が正常に終了しない現象が起きます。
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Error creating machine: Error running provisioning: ssh command error:
command : sudo systemctl -f start docker
err : exit status 1
output : Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
この現象はDocker for MacかWinを使っていて、かつStable版のインストールをしている場合に起きます。
(2017年9月29日現在)
回避策
2017年7月13日リリースのdocker-machine v0.12.2にて修正されています。
Docker for Mac / Winをお使いの場合は2017年9月29日現在、Stable版ですとv0.12.0がインストールされるため、手っ取り早い方法としてはEdge版をインストールすることでv0.12.2がインストールされ問題が起きなくなります。
解説
この問題の原因はサブコマンドであるdocker daemonによって提供されていたデーモン機能が、dockerdコマンドに切り出されることに変更となったための対応が漏れていることから起きています。
https://docs.docker.com/engine/deprecated/#docker-daemon-subcommand
docker-machineがリモート先のdockerのバージョンを調べ、docker daemonを使うかdockerdを使うかを判定する部分にて誤動作し、間違ったコマンドを送ってしまうためセットアップが完了しないというのが根本的な原因です。
dockerのバージョンは現在年と月を元にしたフォーマットになっております。(旧方式では1.13.1が新方式では17.03.0)
https://github.com/moby/moby/releases/tag/v17.03.0-ce
インストール時に内部でリモートからバージョン番号を取得し、持っている順番リストと照らし合わせてどのコマンドを使うかを決めるのですが、そこでの判定ミスというわけです。
この件のIssueはこちらになります。
https://github.com/docker/machine/issues/4156#issuecomment-311964422
どんなコードが修正されたかについては、Issueからのリンクで見られますのできになる方はどうぞ。