takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

Docker Toolbox をアップデートしたらホストOS(CoreOS)の VM が起動しなくなった

Docker Toolbox 18.06.1-ce から 19.03.1 にアップデートしたときに docker-machine start で Docker ホストOS (CoreOS) が起動しなくなったときに行った作業メモ。

検証環境

Windows10 Home Edition
VirtualBox 6.1.10

# Docker Host OS (CoreOS)
$ uname -a
Linux default 4.9.93-boot2docker #1 SMP Thu Jul 19 18:29:50 UTC 2018 x86_64 GNU/Linux

# Docker Toolbox 18.06.1-ce
Docker version 18.06.1-ce, build e68fc7a
docker-machine version 0.15.0, build b48dc28d

発生した問題について

Docker Toolbox 18.06.1-ce の環境から 19.03.1 にアップデート後、 docker-machine upgrade を実行してから docker-machine start したときに以下のエラーが発生してホスト OS の VM が起動しなかった。

$ docker-machine start default
Starting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
Maximum number of retries (5) exceeded

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
default   -        virtualbox   Running                 Unknown   ssh command error:
command : ip addr show
err     : exit status 127
output  : bash: ip: command not found

解決方法について

GitHub の docker/toolbox の Issue で自分と同じ問題が出た人がいて、その方は VM を作り直すことで解決した模様。
Docker Toolbox 18.06.1-cedocker-machine0.15.0 だが、 18.09.0 以降は 0.16.0 に変更されたことが原因と考えられる。
Docker Toolbox 19.03.1docker-machineVM を作り直して解決するか検証する。

検証作業

イメージ、コンテナのバックアップ

現在使用している VM は削除するため、新しい環境でも使用したいイメージやコンテナはあらかじめバックアップしておく。

# 以下のコマンドは Windows 側で実行する

# Windows の docker コマンドを VM に接続
$ eval $(docker-machine env --shell sh default)

# イメージのエクスポート例
$ docker save centos:8 > centos-8.image.tar

# コンテナのエクスポート例
$ docker export busybox_1 > busybox_1.container.tar

現在の VM の削除

$ docker-machine stop default
$ docker-machine rm default

Docker Toolbox 19.03.1 のインストール

下記のサイトから DockerToolbox-19.03.1.exe をダウンロード、インストールする。

github.com

インストール後、docker および docker-machine のバージョンを確認。

$ docker -v
Docker version 19.03.1, build 74b1e89e8a

$ docker-machine -v
docker-machine.exe version 0.16.1, build cce350d7

VM の作成

docker-machine createVM を作成する。

$ docker-machine create --driver virtualbox --virtualbox-memory 2048 --virtualbox-disk-size 40000 default

VM の確認

$ docker-macine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   -        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.5

docker-machine ssh でログイン

$ docker-machine ssh default
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

docker@default:~$ docker -v
Docker version 19.03.5, build 633a0ea838

イメージ、コンテナのインポート

新しく作成した VM にイメージ、コンテナをインポートする。

# 以下のコマンドは Windows 側で実行する

# Windows の docker コマンドを VM に接続
$ eval $(docker-machine env --shell sh default)

# イメージのインポート例
$ docker load < centos-8.image.tar

# コンテナのインポート例
$ cat busybox_1.container.tar | docker import - busybox_1:latest

まとめ

  • docker-machine upgrade した後、VM が起動しなくなった場合は docker-machine のバージョン違いを確認する
  • docker-machine のバージョンが変わっていたら docker-machine createVM を作り直す

参考サイト

takaya030.hatenablog.com

github.com