なぜか動きません!

問題名

なぜか動きません!

概要

あなたは研修グループに所属にしているエンジニア兼先生です。
研修にて、サーバー上でDockerを用いてサービスを構築する研修課題を出題しました。
課題はDocker Compose を使って複数のイメージを起動してみる。という課題でした。ある一人の受講生がエラーが発生し、解決できないと相談しにきました。
エラーを解消し起動を行いなさい。

前提条件

サーバーのルール:Dockerイメージは公式イメージのみ
Docker Hubのサインインはしない

課題
次回,使用するためにWebサーバーとdbをdocker-compose.ymlとDockerfileを使って構築しましょう.
WebサーバーはNGINX,データベースはMariaDBを使用してください.

初期状態

  • /home/user/homework01に課題で使用したdocker-compose.ymlDockerfileが保存されている
  • $ docker-compose up -d に失敗する

終了状態

  • 課題の条件を達成する
  • $ docker-compose up -dが成功し、$ docker-compose psにて全てのコンテナのstatusupしている
  • 解答提出時にエラーが発生した原因を記述する

解説

初めて環境構築を行っていく上で間違えてしまう点、ARMとx86のアーキテクチャの違いと起動ログをみて原因を究明するということに焦点を当てて作成した問題になります。
まず、初期状態にて起動を行うと

$ docker-compose up
Starting homework01_db_1    ... done
Starting homework01_nginx_1 ... done
Attaching to homework01_nginx_1, homework01_db_1
db_1     | standard_init_linux.go:211: exec user process caused "exec format error"
nginx_1  | standard_init_linux.go:211: exec user process caused "exec format error"
homework01_db_1 exited with code 1
homework01_nginx_1 exited with code 1

と,起動に失敗します。

出題時のファイル

$ cat Dockerfile
FROM mariadb@sha256:eacab2a85f2692a71bbecec0ec1d4eab0a813409bc4760b2d15269b05aa2bafb
$ cat docker-compose.yml
version: '3'
services:
    nginx:
            image: nginx@sha256:8789e3c472689faa3849023e5272e887982f0714a9e3c89e4786b8cf614db2cf
    db:
            build: ./

第一関門

初めに、
全角スペースをDockerfileに混入されていることが原因で以下のエラーが出現します。

$ docker-compose build 
nginx uses an image, skipping
Building db
ERROR: Dockerfile parse error line 1: unknown instruction: FROM MARIADB@SHA256:EACAB2A85F2692A71BBECEC0EC1D4EAB0A813409BC4760B2D15269B05AA2BAFB

よってDockerfileの中にある全角を半角に置換します。

第二関門

docker のイメージ情報をみて使用イメージがVMで使用しているアーキテクチャのx86アーキテクチャCPU向けであることの確認します。

$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               <none>              2b71a68aa246        6 days ago          45.3MB
homework01_db       latest              d8d6819532a3        8 days ago          387MB
mariadb             <none>              d8d6819532a3        8 days ago          387MB
$ docker image inspect 2b71a6
.....
"Architecture": "arm",
.....

今回のVMはx86のアーキテクチャを使用してるので、ここの点を変更します。

第三関門

docker-conpsoe.ymlに環境設定の必要事項が未記入のため下記のエラーが出てMariaDBが起動していない。

db_1     | 2021-03-03 17:41:07+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
db_1     |     You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

docker-compose.ymlにて、必要事項を記入する

以上の3つの問題点を解決して起動をすると

$ docker-compose ps
       Name                     Command               State    Ports  
----------------------------------------------------------------------
homework01_db_1      docker-entrypoint.sh mysqld      Up      3306/tcp
homework01_nginx_1   /docker-entrypoint.sh ngin ...   Up      80/tcp  

無事に起動をすることができました。

正解例

$ cat Dockerfile
FROM mariadb@sha256:d866e756c68fce525419ee27e1d76a874c54072e49dfd591891acd28f95760fc
$ cat docker-compose.yml
version: '3'
services:
    nginx:
            image: nginx@sha256:3293470d994e1da29ba232de1809b4c88beb1f3c8352c0c171f8796038888493
    db:
            build: ./
            environment:
                    MYSQL_ROOT_PASSWORD: example

採点基準

以下の基準にて、問題環境と解答文の原因記載の両者ができて得点とする

  • 全角スペースの撤去(Dockefile内) 20%
  • Nginx/MariaDBのx86のイメージに変更(解答にてアーキテクチャの問題と明記している) 40%
  • MariaDBの必要設定を行う(解答分にて変更点を記載もしくはエラーの要因を記入) 40%