docker-compose up コマンドでコンテナを生成、起動させたいけど、ERRORがでて起動しない。（gitのバージョン修正で解決）

INDEX
[1. やりたいことを確認する。](#1-やりたいことを確認する)
[2. 課題（エラーの状況、不明点、エラーログ）を確認する。](#2-課題エラーの状況不明点エラーログを確認する)
[3. 調査する（ググる、ドキュメントを読む）](#3-調査するググるドキュメントを読む)
[4. 調査結果からの考察、対策を実行する。](#4-調査結果からの考察対策を実行する) 
[5. その他調べたこと参考文献](#5-その他調べたこと参考文献)

## 1. やりたいことを確認する。

- `docker-compose up` コマンドでコンテナを生成、起動したい。
- 学習のため、この記事にアウトプットするサンプルアプリを作成しているところ。

https://ryamate.hatenablog.com/entry/2022/04/15/180000

- 該当のDockerfile（PHPのコンテナ）は、以下の内容。

```docker:docker/php/Dockerfile
FROM smaregi/php:7.4.19-fpm-alpine3.13 AS php-base

ENV TZ=Asia/Tokyo \
    COMPOSER_ALLOW_SUPERUSER=1

RUN set -xe \
    && apk add --no-cache git=2.30.2-r0 \
    && docker-php-ext-enable xdebug

COPY --from=composer:1 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/zf-sample
```

https://github.com/ryamate/zend-framework-crud-sample/tree/fix-php-dockerfile-error

## 2. 課題（エラーの状況、不明点、エラーログ）を確認する。

- 実行時（エラー）ログの確認



```:エラーログ全文
# r_yamate @ mbp in ~/Documents/code/zend-framework-crud-sample on git:feature-create-edit-and-delete x [7:18:09] C:17
$ docker-compose up -d --build
[+] Building 18.4s (22/24)
 => [zend-framework-crud-sample_web internal] load build definition from Dockerfile                                                                                                                        0.0s
 => => transferring dockerfile: 32B                                                                                                                                                                        0.0s
 => [zend-framework-crud-sample_db internal] load build definition from Dockerfile                                                                                                                         0.0s
 => => transferring dockerfile: 306B                                                                                                                                                                       0.0s
 => [zend-framework-crud-sample_app internal] load build definition from Dockerfile                                                                                                                        0.0s
 => => transferring dockerfile: 515B                                                                                                                                                                       0.0s
 => [zend-framework-crud-sample_web internal] load .dockerignore                                                                                                                                           0.1s
 => => transferring context: 2B                                                                                                                                                                            0.0s
 => [zend-framework-crud-sample_app internal] load .dockerignore                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                            0.0s
 => [zend-framework-crud-sample_db internal] load .dockerignore                                                                                                                                            0.0s
 => => transferring context: 2B                                                                                                                                                                            0.0s
 => [zend-framework-crud-sample_web internal] load metadata for docker.io/library/nginx:1.18.0-alpine                                                                                                      2.9s
 => [zend-framework-crud-sample_app internal] load metadata for docker.io/smaregi/php:7.4.19-fpm-alpine3.13                                                                                                2.9s
 => [zend-framework-crud-sample_db internal] load metadata for docker.io/mysql/mysql-server:5.6                                                                                                            2.9s
 => [zend-framework-crud-sample_db 1/3] FROM docker.io/mysql/mysql-server:5.6@sha256:4b2262a86a7fa9010ffa8153eb0fe751feba83a0dac9aa594c940726ca01cb99                                                      0.0s
 => [zend-framework-crud-sample_db internal] load build context                                                                                                                                            0.0s
 => => transferring context: 1.38kB                                                                                                                                                                        0.0s
 => [zend-framework-crud-sample_web internal] load build context                                                                                                                                           0.0s
 => => transferring context: 1.11kB                                                                                                                                                                        0.0s
 => [zend-framework-crud-sample_web 1/4] FROM docker.io/library/nginx:1.18.0-alpine@sha256:93baf2ec1bfefd04d29eb070900dd5d79b0f79863653453397e55a5b663a6cb1                                                0.0s
 => CACHED [zend-framework-crud-sample_db 2/3] COPY ./docker/mysql/my.cnf /etc/mysql/conf.d/my.cnf                                                                                                         0.0s
 => CACHED [zend-framework-crud-sample_db 3/3] COPY ./docker/mysql/initdb.d /docker-entrypoint-initdb.d                                                                                                    0.0s
 => [zend-framework-crud-sample_web] exporting to image                                                                                                                                                    0.0s
 => => exporting layers                                                                                                                                                                                    0.0s
 => => writing image sha256:ef21d6df4bf7c3eb9345415348bd6e00b00e8538907f72e64a0ca2f624b5bade                                                                                                               0.0s
 => => naming to docker.io/library/zend-framework-crud-sample_db                                                                                                                                           0.0s
 => => writing image sha256:5ba29250d0c81c2030bc9a07dd66164cc529bf5d0df1c960bfb985586225a40a                                                                                                               0.0s
 => => naming to docker.io/library/zend-framework-crud-sample_web                                                                                                                                          0.0s
 => CANCELED [zend-framework-crud-sample_app] FROM docker.io/library/composer:1                                                                                                                           14.9s
 => => resolve docker.io/library/composer:1                                                                                                                                                                2.6s
 => => sha256:a60f85627e3d0df735c885c9502afee6c4a98aec08c02a0b31ffd6ee36d1d3ed 1.05MB / 1.70MB                                                                                                            12.4s
 => => sha256:89395091f2959844751d9669bf4ffa0d72cae1e7710bd34d692c4a724abcfe20 1.26kB / 1.26kB                                                                                                             0.3s
 => => sha256:54197176698eef20846459d212377c413701772b0a381c43b3f558c58de5cabc 13.02kB / 13.02kB                                                                                                           0.0s
 => => sha256:55d1d3a1f69a3c4cf9e63c542034345861bbd620808bc43bdb25abea303001db 1.65kB / 1.65kB                                                                                                             0.0s
 => => sha256:b19f3ec44036840451de93e8a11f4e75713b7e9fa0a033dfec28b5503ae7a231 3.25kB / 3.25kB                                                                                                             0.0s
 => => sha256:df9b9388f04ad6279a7410b85cedfdcb2208c0a003da7ab5613af71079148139 2.81MB / 2.81MB                                                                                                             4.4s
 => => sha256:2342a00f1dee7a210bf0e6327fce29393f5b0b67b1dbd297a5d39b322c2c61df 267B / 267B                                                                                                                 1.7s
 => => sha256:bff752c21e64ca241a02a1a78ff7700712039a2fa7b20b59ab7b2bce188d5e9c 1.05MB / 11.72MB                                                                                                           12.4s
 => => extracting sha256:df9b9388f04ad6279a7410b85cedfdcb2208c0a003da7ab5613af71079148139                                                                                                                  0.4s
 => => sha256:843ed70f77393571f5ed22d6444e27cedb57e143a5f8c0167996e0e8b0c7fa9f 491B / 491B                                                                                                                 4.7s
 => => sha256:8553ab13fe300a81663a186444a6de092810f9afb97f74313d730747f486f4db 4.19MB / 16.21MB                                                                                                           12.4s
 => CACHED [zend-framework-crud-sample_app php-base 1/4] FROM docker.io/smaregi/php:7.4.19-fpm-alpine3.13@sha256:df94a4d40fefa82b345367602a3d01cb29fc2615e1ac6da295c96fb364817b28                          0.0s
 => CACHED [zend-framework-crud-sample_web 2/4] RUN apk --update --no-cache add git zip unzip                                                                                                              0.0s
 => CACHED [zend-framework-crud-sample_web 3/4] COPY ./docker/nginx/nginx.conf /etc/nginx/conf.d/default.conf                                                                                              0.0s
 => CACHED [zend-framework-crud-sample_web 4/4] WORKDIR /var/www/zf-sample/public                                                                                                                          0.0s
 => ERROR [zend-framework-crud-sample_app php-base 2/4] RUN set -xe     && apk add --no-cache git=2.30.2-r0     && docker-php-ext-enable xdebug                                                           14.9s
------
 > [zend-framework-crud-sample_app php-base 2/4] RUN set -xe     && apk add --no-cache git=2.30.2-r0     && docker-php-ext-enable xdebug:
#0 1.023 + apk add --no-cache 'git=2.30.2-r0'
#0 1.085 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
#0 2.122 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
#0 14.81 ERROR: unable to select packages:
#0 14.85   git-2.30.3-r0:
#0 14.85     breaks: world[git=2.30.2-r0]
------
failed to solve: executor failed running [/bin/sh -c set -xe     && apk add --no-cache git=2.30.2-r0     && docker-php-ext-enable xdebug]: exit code: 1
```
</details>

docker-compose.yml には、appコンテナ(php)、webコンテナ(nginx)、dbコンテナ(mysql-server)を記述していて、全て起動していない。

```bash:Dockerコンテナの状況確認
$ docker-compose ps
NAME                COMMAND             SERVICE             STATUS              PORTS
```

実行時ログのターミナルでの文字色はこんな表示。黄色と赤のあたり見ていく。

![スクリーンショット 2022-04-13 21.34.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/a3a5671a-6ba0-6398-fa52-345a62dd9ca9.png)

<font color="Gold">
 => CANCELED [zend-framework-crud-sample_app] FROM docker.io/library/composer:1
</font>

キャンセルされた？docker.io？知らないから後で一応調べておこう。それよりERRORの赤字が明らかに怪しい。
<font color="Red">
 => ERROR [zend-framework-crud-sample_app php-base 2/4] RUN set -xe     && apk add --no-cache git=2.30.2-r0     && docker-php-ext-enable xdebug
</font>

該当箇所は、appコンテナ。

```
 > [zend-framework-crud-sample_app php-base 2/4] RUN set -xe     && apk add --no-cache git=2.30.2-r0     && docker-php-ext-enable xdebug:
#0 1.023 + apk add --no-cache 'git=2.30.2-r0'
#0 1.085 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
#0 2.122 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
#0 14.81 ERROR: unable to select packages:
#0 14.85   git-2.30.3-r0:
#0 14.85     breaks: world[git=2.30.2-r0]
------
failed to solve: executor failed running [/bin/sh -c set -xe     && apk add --no-cache git=2.30.2-r0     && docker-php-ext-enable xdebug]: exit code: 1
```

gitがなんたらと言われてる。

エラーの後の英語を読んでみよう（DeepL翻訳にぶっ込んでみよう）。

```
> [zend-framework-crud-sample_app php-base 2/4] RUN set -xe && apk add --no-cache git=2.30.2-r0 && docker-php-ext-enable xdebug:
#0 1.023 + apk add --no-cache 'git=2.30.2-r0'。
#0 1.085 フェッチ https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
#0 2.122フェッチ https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
#0 14.81 error: パッケージを選択できません。
#0 14.85 git-2.30.3-r0:
#0 14.85     breaks: world[git=2.30.2-r0].
------
解決に失敗しました: 実行者の実行に失敗[/bin/sh -c set -xe && apk add --no-cache git=2.30.2-r0 && docker-php-ext-enable xdebug]:終了コード 1
```

```
#0 1.023 + apk add --no-cache 'git=2.30.2-r0'
```

とあって、「パッケージを選択できません」と言われている。

そして、

```
#0 14.85 git-2.30.3-r0:
```

とおもむろに記載されている…

`git-2.30.3-r0`に替えてね、というバージョン変更のメッセージかな？`git=2.30.2-r0` は、`=` だけど大丈夫？（結論、大丈夫だった）

その他、直前で、Docker Desktop を4.7にアップデートしたけど、関係ある？（結論、関係なかった）

## 3. 調査する（ググる、ドキュメントを読む）

### 調査① `git=2.30.2-r0`

https://pkgs.org/download/git

なんかLinux用のGitダウンロードのリストのサイトが出てきた。

使用している alpine3.13 に対応する箇所見てみると、

![スクリーンショット 2022-04-14 20.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/5a9f5f1b-45a6-e016-035c-12e404c43522.png)

ERRORの内容に記載されていた `git-2.30.3-r0` と一致する。 Git のバージョンを 2.30.2 から 2.30.3 に変更するということで良さそう。

…ところで、Alpine 3.13ってなんだっけ。

### 調査② `alpine3.13`

> **Alpine Linux** (アルパイン・リナックス) は、muslとBusyBoxをベースとしたLinuxディストリビューションである。
> 

> Alpine Linuxは独自のパッケージ管理システムとしてAPKを採用している。
> 

https://ja.wikipedia.org/wiki/Alpine_Linux

apk は Alpine Linux 独自のパッケージ管理システムなのですね。

### 調査③ `apk add --no-cache`

> `apk add ${パッケージ名}`
> 
> 
> パッケージの追加
> 
> - `apk add curl gcc` のように複数指定も可能
> 
> 以下で各種オプションの解説をする
> 
> `-no-cache`
> 
> パッケージをキャッシュしなくするオプション
> 
> 通常、ダウンロードされたパッケージは `/var/cache/apk` にキャッシュされる
> 
> DockerでImageサイズを削減するために `RUN rm -rf /var/cache/apk` とかしなくて良いので便利
> 

https://blog.kasei-san.com/entry/2020/08/25/084430

## 4. 調査結果からの考察、対策を実行する

### `git=2.30.3-r0` に修正する。

```diff_docker:docker/php/Dockerfile
FROM smaregi/php:7.4.19-fpm-alpine3.13 AS php-base

ENV TZ=Asia/Tokyo \
    COMPOSER_ALLOW_SUPERUSER=1

RUN set -xe \
-    && apk add --no-cache git=2.30.2-r0 \
+    && apk add --no-cache git=2.30.3-r0 \
    && docker-php-ext-enable xdebug

COPY --from=composer:1 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/zf-sample
```

### docker-compose up コマンドでコンテナを生成、起動する。

```bash
$ docker-compose up -d --build
```

![スクリーンショット 2022-04-16 8.20.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/647fd83e-fae2-c0fc-6b8e-8e96acb84c8b.png)

無事に起動！

![スクリーンショット 2022-04-16 8.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/047a30d8-847b-9aeb-7bd4-18f53ca5e102.png)


## 5. その他調べたこと、参考文献

> • `docker.io` はレジストリ Docker Hub 、名前空間（イメージを格納するレポジトリ）は `library`（公式イメージ）、その中の `hello-world` イメージの、タグ名 `latest`（最新）をダウンロード（pull）しました。
> 

https://qiita.com/zembutsu/items/24558f9d0d254e33088f

https://qiita.com/pottava/items/970d7b5cda565b995fe7

https://wiki.alpinelinux.org/wiki/Package_management#Add_a_Package