Windows10 × Docker for Windows トラブルシューティング

いくつか失敗するポイントがあったので、問題発生～解決の都度追記していきます。

# 前提環境

| # | Type | Software |
|:-- |:-- |:-- |
| 1 | ClientOS  | [Microsoft Windows 10 Enterprise 10.0.14393 ビルド 14393](https://msdn.microsoft.com/ja-jp/subscriptions/downloads/hh442898.aspx#FileId=71099) |
| 2 | Container Host | [Docker for Windows](https://docs.docker.com/docker-for-windows/install/) |

- [Windows10 に Docker for Windows をインストールする手順 - qiita](http://qiita.com/busonx/items/849a861d8bb93c71bbe7)

# トラブルシューティング

## 問題.1 メモリ不足でDockerが起動しない

**■現象**

Dockerを起動するとエラーが発生する。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/3065a087-36e9-0faa-bfee-acff6eea0d9a.png)

タスクアイコンも真っ赤。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/67d07969-d3c2-c052-644b-ff86bd580c25.png)

**■原因**

エラーの内容通り、設定しているメモリが確保できていない。

**■対処方法**

- タスクアイコンで右クリック。
- コンテキストメニューから `Settings...` を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/8f66df0e-5985-212f-7b26-e39c570f88c7.png)

- `Advanced` を選択。
- Memory: `1024` MB に設定。
- `Apply` ボタンを選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/015178c6-245c-d17e-bc9e-033c2c8743e3.png)

- `Docker is running` となればOK。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/7af9f84c-2b72-8949-6dcc-f1cc14473b57.png)

## 問題.2 ホストとコンテナのボリューム共有に失敗する

**■現象**

- タスクアイコンで右クリック。
- コンテキストメニューから `Settings...` を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/054a692e-4af4-0a54-1160-39775a7781f4.png)

- `Shared Drives` を選択。
- C Drive のチェックをON。
- `Apply` ボタンを選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/12f7327e-683f-2777-683e-530fe82d10f1.png)

エラーが発生する。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/6be41b3d-e8ad-54bb-e4ee-a9368ad66622.png)

**■原因**

- 公式の説明: [FIREWALL RULES FOR SHARED DRIVES - docs.docker.com](https://docs.docker.com/docker-for-windows/#firewall-rules-for-shared-drives)
- ドンピシャのissue: [Cannot share drive between Windows 10 and Docker #380 - github.com](https://github.com/docker/for-win/issues/380)

どうやら、使用しているセキュリティソフト [Kaspersky（個人向け）](http://home.kaspersky.co.jp/store/kasperjp/ja_JP/home) が、ブロックしているとのこと。

**■対処方法**

- タスクアイコンで右クリック。
- コンテキストメニューから `設定` を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/eb987f47-a3a8-78be-c26e-860df9229a76.png)

- 設定ボタン（歯車アイコン）を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/1f2638e8-47fc-5506-f0fa-f05ecb3a2c5c.png)

- `プロテクション` を選択。
- `ファイアウォール` を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/cafa68a5-146a-678d-324a-9a98f5209c18.png)

- `ネットワーク` を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/c43ca835-eb5f-acf0-0e46-00025a6342b1.png)

- `DockerNAT` を選択。
- `編集` ボタンを選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/3b0a4a66-3093-0b58-88ca-703a4e752994.png)

- ネットワーク種別: `許可するネットワーク` を選択。
- `保存` ボタンを選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/c288acf1-4d75-fb44-acf9-39c6aa5bde76.png)

- Dockerの設定をリトライしたところ、エラーは発生せずに完了しました。
- `Docker is running` となればOK。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/0118c223-a8c3-b329-9e99-8b3333f5f804.png)

### 実際にファイル共有できているのか確認

[Nginx](https://hub.docker.com/_/nginx/) のコンテナを動かして、アクセスログを共有してみます。

```ps1:powershell
# docker-compose 試運転用のリポジトリを git clone 
git clone https://github.com/busonx/pilot-docker-compose.git
cd .\pilot-docker-compose\v2\nginx\
docker-compose up -d
```

- ブラウザで http://localhost:80/ を開きます。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/24f9eac3-195f-6372-b7c9-3feba43819e8.png)

- 正常に動作しましたので、コンテナを停止します。

```ps1:powershell
docker-compose stop
```

- アクセスログが残ったのか確認します。（私が使用しているのは Visual Studio Code なので、 `code` コマンドでファイルを開いています。）

```ps1:powershell
code .\datastore\webserver\nginx\access.log
```

- アクセスログファイル `access.log ` があること、
- アクセスログが残っていることが確認できました。

```text:access.log
172.18.0.1 - - [02/Apr/2017:03:19:37 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"
```

## 問題.3 コンテナを取得しようとするとタイムアウト

**■現象**

docker-compose でコンテナを立ち上げようとすると、タイムアウトになる。

```ps1:powershell
PS C:\> docker-compose up -d
```

```ps1:result
Building pg_db
Step 1/1 : FROM postgres:9.6.2
ERROR: Service 'pg_db' failed to build: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
```

**■原因**

プロキシの設定漏れ。（会社あるあるですね :sweat: ）

**■対処方法**

- タスクアイコンで右クリック。
- コンテキストメニューから `Settings...` を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/8f66df0e-5985-212f-7b26-e39c570f88c7.png)

- `Proxies` を選択。
- `Manual proxy configuration` を選択。
- Web Server (HTTP): `http://proxyserver.jp:8080` を設定。
  - `proxyserver.jp`: プロキシサーバ名
  - `8080`: プロキシのポート
- Bypass for these hosts and domains: (use commas to separate entries): `localhost, 127.0.0.1` を設定。
  - 除外設定です。適宜設定してください。
- `Apply` ボタンを選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/43080152-2c92-3422-e2df-4c8db30d1ece.png)