トラブルシューティング¶
通常 QuickStart は難しい設定など一切なく利用できます。しかし、いくつかの場合に問題が起こるかもしれません。
エラー例¶
マシン( docker-machine env default
など)に接続しようとする時や Docker Hub からイメージの取得時( docker run hello-world
)に、エラーが発生するかもしれません。
エラーは次のように証明書に関するものかもしれません。
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": dial tcp 192.168.99.100:2376: i/o timeout
あるいは、証明書の再作成を促すでしょう。
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": x509: certificate is valid for 192.168.99.101, not 192.168.99.100
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.
あるいは、ネットワークのタイムアウトを表示するかもしれません。
bash-3.2$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a proxy.
bash-3.2$
解決法¶
正しい状態に戻すために、迅速な解決方法を示します。これらの例では Docker ホストが動くマシンを default
と呼びます。
証明書の再作成¶
エラー発生時、証明書の再作成が指示される場合があります。エラーを出なくするためには、接続可能な証明書の再作成を試みてください。
$ docker-machine regenerate-certs default
Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Docker ホストの再起動¶
$ docker-machine restart default
Machine を起動したら、コマンドライン上で環境変数を指定します。
$ eval $(docker-machine env default)
docker-machine ls
コマンドを実行し、マシンが実行中であることと、コマンドライン上で通信可能なことを確認します。アクティブなマシン(ACTIVE の列)にアスタリスク(*)が付いているのがわかります。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.101:2376 v1.10.1
マシンを停止・削除し、あたらしいマシンを作成¶
$ docker-machine stop default
Stopping "default"...
Machine "default" was stopped.
$ docker-machine rm default
About to remove default
Are you sure? (y/n): y
Successfully removed default
docker-machine create
コマンドに virtualbox
ドライバを指定し、 default
という名前のマシン(あるいは任意のマシン名称)を作成できます。
$ docker-machine create --driver virtualbox default
Running pre-create checks...
(default) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.10.1
(default) Downloading
...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default
環境変数を指定するには、以下のコマンドを実行します。
$ eval $(docker-machine env default)
docker-machine ls
コマンドを実行し、マシンが実行中であることと、コマンドライン上で通信可能なことを確認します。アクティブなマシン(ACTIVE の列)にアスタリスク(*)が付いているのがわかります。
HTTP プロキシと接続に関するエラー¶
HTTP プロキシによって接続に関する特殊なエラーが発生する場合があります。VPN を使うシステム上に Docker Toolbox をインストールしている時、HTTP プロキシを使うと(あるいは企業内のネットワークにおいて)、クライアントがサーバに接続できないというエラーが発生します。
この種のエラーは以下のようなものです。
$ docker run hello-world
An error occurred trying to connect: Post https://192.168.99.100:2376/v1.20/containers/create: Forbidden
$ docker run ubuntu echo "hi"
An error occurred trying to connect: Post https://192.168.99.100:2376/v1.20/containers/create: Forbidden
Docker マシンに HTTP プロキシを設定¶
Toolbox は仮想マシンを作成するため start.sh
を実行します。ここに HTTP_PROXY
や HTTPS_PROXY
や NO_PROXY
など default machine
の create
(作成時)オプションを指定します。
既に作成された Docker Machine (例: default
)でも、プライベートのネットワーク上に対応した HTTP プロキシの再設定を行えます。設定を変えると、異なったネットワーク上でも同じシステムを利用可能です。
他にも、仮想マシン内にある /var/lib/boot2docker/profile
ファイルのプロキシ設定を自分で直接書き換える方法と、 docker-machine create
コマンド実行時にプロキシの指定をする方法があります。
どちらも詳細な方法は、以下で説明します。
Docker マシン上の /var/lib/boot2docker/profile
を更新¶
この問題を解決する方法の1つに、既存マシン上の /var/lib/boot2docker/profile
ファイルを編集し、任意のプロキシを指定することです。
ファイルは仮想マシン自身が持っているため、マシンには ssh
でログインしてファイルを編集・保存する必要があります。
マシンの設定で``NO_PROXY`` の値を指定すると、ここで指定した環境はプロキシ・サーバを通らないようにします。URL に対して接続の問題が起こる典型的な例が、Docker Machine の URL です。具体的には以下の通りです。
- 仮想マシン(例:
default
)にログインします。
$ docker-machine ssh default
docker@default:~$ sudo vi /var/lib/boot2docker/profile
以下の例のように、ファイルの末尾に
NO_PROXY
の設定を追加します。# 以下は皆さんのオフィスの PROXY 環境に置き換えてください export "HTTP_PROXY=http://PROXY:PORT" export "HTTPS_PROXY=http://PROXY:PORT" # プロキシを通したくない環境を NO_PROXY で指定します export "NO_PROXY=192.168.99.*,*.local,169.254/16,*.example.com,192.168.59.*"
- Docker を再起動します。
仮想マシンの profile
を変更したら、Docker を再起動して、マシンからログアウトします。
docker@default:~$ sudo /etc/init.d/docker restart
docker@default:~$ exit
Docker コマンドを再度試します。これで Docker も Kitematic も適切に動作するでしょう。
異なるネットワークに移動する時は(例えば会社のオフィス・ネットワークを離れ、家に帰った時)、 /var/lib/boot2docker/profile
の設定を変更し、Docker を再起動します。
マシン作成時に --engine env
でプロキシ設定をする方法¶
自動作成されたマシンの設定を変えると、 default
として作成したマシンを削除できます。他の方法として docker-machine create
時に --engine env
フラグで任意のプロキシを設定する方法があります。
次の例は default
マシンの作成時、PROXY として http://example.com:8080
と https://example.com:8080
を指定し、 NO_PROXY
として example2.com
を指定しています。
docker-machine create -d virtualbox \
--engine-env HTTP_PROXY=http://example.com:8080 \
--engine-env HTTPS_PROXY=https://example.com:8080 \
--engine-env NO_PROXY=example2.com \
default
docker-machine create
の詳しい使い方は Docker Machine リファレンスの create をご覧ください。
参考
- Troubleshooting
- https://docs.docker.com/faqs/troubleshoot/