概要
docker 公式サイトに載っている手順の通りに、リモートサーバ(ubuntu 14.04 LTS) にdocker をインストールしたところ、以下のコマンドを打った直後にリモートサーバと通信できなくなりました。
sudo apt-get install docker-engine
ssh をしても、リモートデスクトップ接続をしても、接続できません。
クラウドのサーバだと終了ですね。
原因と回避方法について説明します。
原因は docker が作成するサブネットとクライアントのIPアドレスが被っていること
docker をインストールする前に、クライアントのIPアドレスを確認します。
リモートサーバに ssh でログインして、接続を確認します。
$ netstat -ta
tcp 0 320 リモートサーバのIP:ssh 172.17.ほげ.ほげ:53563 ESTABLISHED
docker が作成するサブネットは 172.17.0.0/16 なので、上記のケースだと被っています。そのため、docker daemon を起動するとリモートサーバと通信できなくなります。
対応
docker のサブネットの設定を変更すれば良いのですが、apt でインストールすると、デフォルトでは自動で docker が初期設定で起動してしまい、接続が切断されてしまうのですよね。というわけで、自動起動しないように設定します。
docker-engine をインストールする前に、以下の設定を入れて、自動起動を防止します。
以下、root ユーザで実行してください。
cat << EOF > /usr/sbin/policy-rc.d
#!/bin/sh
exit 101
EOF
chmod +x /usr/sbin/policy-rc.d
docker-engine をインストールします。
apt-get install docker-engine
docker daemon が起動しないので、接続が切断されません(嬉)。
docker のサブネットの設定を変更します。
echo 'DOCKER_OPTS="--bip=172.100.42.1/16"' >> /etc/default/docker
docker daemon を起動します。
service docker start
OKです!