Re:VIEWの環境構築で「docker: Cannot connect to the Docker daemon ～」エラーで困った話

# 何の話か？
技術書展８にて初めて同人誌を作成するのですが、印刷会社への入稿データとしてPDFが必要になります。まだ書籍の内容はできていませんが、環境は整備する必要があるので、そろそろ準備せねばということで、Re:VIEWをDockerのイメージから構築しようとしてハマった話です。同じことで悩む方の助けとなれば幸いです。

# 前提の内容
Re:VIEWの環境構築方法は、ネットを探すといろいろヒットするのですが、私が試した方法は、Windows10の環境で、Windows Subsystem for Linux（WSL）を有効にし、Microsoft StoreからUbuntu16.04をインストールし、そこにDockerをインストールした上で、Re:VIEW4.0のイメージを実行する方法です。一番依存関係が少なくて簡単に作れそうでしたので・・・（でもハマった）

私は、こちらの記事を参考に環境を構築しています。
[Re:VIEW環境をWindows10上で簡単に構築してPDFを出力するまで](https://qiita.com/hoshimado/items/7592cee28c1bde545b78)

![allimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/7a3cbb0f-f489-555d-ac40-ec4e6c1349f5.png)

#ハマったポイント１
Windows環境で、Dockerを利用するために、Ubuntu16.04LTSをインストールして、Dockerも手順通りにインストールしました（そのつもり）。上記の図では、③の部分です。Dockerのインストール確認で、「sudo docker run hello-world」を実行すると、「docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.」が表示されハマりました。
![runerror.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/fcc26c8a-fedb-27e6-2a56-108fdb7d8120.png)

この現象は、dockerのサービスが上手く起動できてない場合に発生することが調べて分かってきました。dockerをサービスとして登録するためのコマンドで、「sudo service docker start」を実行すると、[OK]と右側に表示されるのですが、実はこれに騙されました。
下記のキャプチャーは、２回連続で「sudo service docker start」を実行し、その直後に「sudo service docker stop」を実行した結果です。
![startdocker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/30612bcd-5094-9cce-ea03-8b169115e818.png)

本来であれば、以下のように動作すべきです。
１回目の起動では、OKが表示され、２回目は表示されず、Stopは正常に終了する。
![start_OK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/614b8f0b-859f-8369-cc4a-f31085af22bb.png)

これは、サービスが上手く起動できないことによるものと考えることができます。
※起動できたのかもしれないが、すぐに終了してしまう状況が発生している。（と考えられる）

#ハマったポイント１の解決方法
「sudo service docker start」を実行する際は、必ずubuntu16.04を管理者権限として起動します。
１．ubuntu16.04のアプリを右クリックし「管理者として実行」を選択します。
![ubuntu_kanri.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/144c2152-d396-e578-005b-e93d1f5a49db.png)

２．ユーザアカウント制御の画面で「はい」を選択します。※Windowsの設定で表示されない場合もあります。
![account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/06db9487-08e8-30ae-6dc2-399c165f5de2.png)

３．コンソールで、「sudo servie docker start」を実行します。
　－＞ * Starting Docker: docker                    [OK]　が表示される。

４．コンソールで、「docker ps」を実行して、下記の内容が表示されれば大丈夫です。
![fin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/7770a23c-2cd7-39d6-ef3a-c55178bbb253.png)

#ハマったポイント２
ハマったポイント１では、「docker:Cannot connect to the Docker daemon at ~」のエラーメッセージでしたが、hello-worldを実施した際に、それとは別のメッセージがでるPCがありました。
「docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:303: getting the final child's pid from pipe caused \"EOR\"": unknown.」
![point2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143415/8f149ef6-f941-a860-0878-9b1e480706fb.png)

こちらについては、上手い解決方法が見つかりませんでしたが、DockerのVersionを下げることで動作させることができました。

#ハマったポイント２の解決方法
デフォルトでは、Docker 18.09.7 build 2d0083dがインストールされました。（2020/01/06時点）
そこで、それよりも古いVersionのDocker 17.12.1~ce-0~ubuntuをインストールしたところ現象が発生しませんでした。

下記の記事を参考にし、最後のVersion指定のコマンドを「sudo apt-get install docker-ce=17.12.1~ce-0~ubuntu」で実行します。
[ubuntu 16.04.2 (ec2) に docker をバージョン指定で新規インストール](https://qiita.com/high-u/items/21b54392b0266f4a9782)

#まとめ
これは、私自身のまとめになるのですが、こんな感じで順番にコマンドを打てば、ひとまず上記のハマりポイント２つを避けて環境が作れました。
最初から、Docker 17.12.1~ce-0~ubuntuを使う前提で環境を構築します。

管理者権限でubuntuを起動

```Bash
sudo apt update
sudo apt upgrade
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
sudo apt-get update
apt-cache madison docker-ce
sudo apt-get install docker-ce=17.12.1~ce-0~ubuntu
sudo cgroupfs-mount
sudo usermod -aG docker $USER
exit
```

管理者権限でubuntuを起動（上記と続けてでも良いが・・・）

```Bash
sudo service docker start
sudo service docker stop
sudo service docker start
sudo docker ps
exit
```

普通にubuntuを起動

```Bash
sudo docker run hello-world
```

その後は、
[Re:VIEW環境をWindows10上で簡単に構築してPDFを出力するまで](https://qiita.com/hoshimado/items/7592cee28c1bde545b78)
にあるように　Re:VIEW image for Dockerの取得の章から、開始すればOKだが、私の場合は、Re:VIEW4.0を使うのでこれ。

```Bash
sudo docker pull vvakame/review:4.0
```

#参考サイト

[Re:VIEW環境をWindows10上で簡単に構築してPDFを出力するまで](https://qiita.com/hoshimado/items/7592cee28c1bde545b78)
[ubuntu 16.04.2 (ec2) に docker をバージョン指定で新規インストール](https://qiita.com/high-u/items/21b54392b0266f4a9782)
[Dockerを使ってRe:VIEWで本が書きたい！～ステップ1:Docker for Windowsを入れよう～](https://mochikoastech.hatenablog.com/entry/2019/06/14/001632)
[Dockerイメージとコンテナの削除方法](https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae)