読者です 読者をやめる 読者になる 読者になる

#chiroito ’s blog

Java を中心とした趣味の技術について

Windows から Virtualbox 上の docker ホストへ接続する

docker Oracle Linux

概要

Windows 8.1 で docker を使用するには、Virtualbox を使用しないといけません。Docker ホストは docker-engine をインストールした段階ではリモートから接続できません。今回はリモートから TCP の 2375 番ポートで接続できるように Docker ホストを設定します。また、設定できたことを確認するため Docker クライアントからの接続も試みます。

環境

Docker ホストの設定

リモートにいる Docker クライアントから接続できるように設定します。クライアントから接続するためのポートと IP を確認します。Docker ホストが持つ全ての IP の 2375 ポートで接続できるようにします。

設定ファイルの場所を確認
$ rpm -ql docker-engine | grep docker.service$

/usr/lib/systemd/system/docker.service

所持する全ての IP で tcp の 2375 番ポートでリッスンするように ExecStart に-H tcp://0.0.0.0:2375を追加
$ vim /usr/lib/systemd/system/docker.service

[Service]
# ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

設定の反映と docker の再起動
$ systemctl daemon-reload
$ systemctl restart docker

TCP の 2375 で動いていることを確認
$ netstat -tln | grep 2375

tcp6       0      0 :::2375                 :::*                    LISTEN

ホストオンリーアダプタ(今回は enp0s8 )の IP を確認
$ ifconfig | grep -A 1 enp

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
--
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.100  netmask 255.255.255.0  broadcast 192.168.56.255

※注意:ファイアーウォールの設定

Windows からのリクエストを受付けるため Docker ホストとなる OS のファイアーウォールで TCP の 2375 ポートを通すように設定しないといけません。今回は試すだけなのでファイアーウォールを停止します。ちゃんと使う場合はキチンと設定しましょう。 Oracle Linux 7 からはファイアーウォールに iptables ではなく firewalld を使用しています。

ファイアーウォールを停止して起動しないようする
systemctl stop firewalld
systemctl disable firewalld

Docker クライアントの設定

Docker クライアントは Docker ホストが待ち受けている IP とポートへ接続します。クライアントは接続したい Docker ホストを指定します。Docker ホストの指定は実行時に指定する方法と環境変数で指定する方法があります。

実行時に Docker ホストを指定する方法

実行時に -H オプションを付けてその後に待ち受けている IP とポートを指定します。
$ docker -H tcp://192.168.56.100:2375 run hello-world

Hello from Docker!
(略)

環境変数で Docker ホストを指定する方法

Docker ホストの指定は DOCKER_HOST 環境変数で指定します。
set DOCKER_HOST=tcp://192.168.56.100:2375

環境変数で指定した場合には実行時に指定する必要はありません。
$ docker run hello-world

Hello from Docker!
(略)