INDEX
1. やりたいことを確認する。
2. 課題(エラーの状況、不明点、エラーログ)を確認する。
3. 調査する(ググる、ドキュメントを読む)
4. 調査結果からの考察、対策を実行する。
5. その他調べたこと参考文献
1. やりたいことを確認する。
-
docker-compose up
コマンドでコンテナを生成、起動したい。 - 学習のため、この記事にアウトプットするサンプルアプリを作成しているところ。
- 該当のDockerfile(PHPのコンテナ)は、以下の内容。
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
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
docker-compose.yml には、appコンテナ(php)、webコンテナ(nginx)、dbコンテナ(mysql-server)を記述していて、全て起動していない。
$ docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
実行時ログのターミナルでの文字色はこんな表示。黄色と赤のあたり見ていく。
=> CANCELED [zend-framework-crud-sample_app] FROM docker.io/library/composer:1キャンセルされた?docker.io?知らないから後で一応調べておこう。それよりERRORの赤字が明らかに怪しい。
=> 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
該当箇所は、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
なんかLinux用のGitダウンロードのリストのサイトが出てきた。
使用している alpine3.13 に対応する箇所見てみると、
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を採用している。
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
とかしなくて良いので便利
4. 調査結果からの考察、対策を実行する
git=2.30.3-r0
に修正する。
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 コマンドでコンテナを生成、起動する。
$ docker-compose up -d --build
無事に起動!
5. その他調べたこと、参考文献
•
docker.io
はレジストリ Docker Hub 、名前空間(イメージを格納するレポジトリ)はlibrary
(公式イメージ)、その中のhello-world
イメージの、タグ名latest
(最新)をダウンロード(pull)しました。