1
/
5

Docker環境構築で困ったらログを見る!


さて今回は、Dockerのlogを見ることで環境構築の躓きを解決する記事になります。
ではよろしくお願いします!!

目次 [非表示]

環境情報

Docker version 20.10.8

環境構築実施

下記Docker-compose.ymlで環境を構築します。

今回の作成コンテナは下記3つのコンテナになっています。

  1. appコンテナ(アプリケーション用)
  2. mysqlコンテナ(DB用)
  3. nodeコンテナ(Node用)
version: "3.8"
services:
web:
build: ./container/php
container_name: app
ports:
- 8080:8080
volumes:
- ./src:/var/www/html/
working_dir: /var/www/html/
db:
build: ./container/mysql
container_name: mysql
ports:
- 3306:3306
environment:
MYSQL_DATABASE: public
MYSQL_USER: iwama
MYSQL_PASSWORD: Test1111
node:
build: ./container/node
container_name: node
ports:
- 81:81
volumes:
- ./src:/var/www/html/
working_dir: /var/www/html/
tty: true

3つのコンテナを下記コマンドでビルド&アップします。

docker-compose up -d --build
============================
【実行結果】
Creating mysql ... done
Creating app ... done
Creating node ... done

正常にビルドが完了してるな!

Dockerのステータスを確認します。

docker-compose ps
=================
【実行結果】
Name Command State Ports
---------------------------------------------------------------------------------------
app docker-php-entrypoint apac ... Up 80/tcp, 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
mysql docker-entrypoint.sh mysqld Exit 1
node docker-entrypoint.sh node Up 0.0.0.0:81->81/tcp,:::81->81/tcp

あれ?dbコンテナだけ立ち上がってない!

ymlファイルの書き方も間違ってないし、ビルドも正常に実行されていたしなぜ立ち上がらないんだろう?

エラー内容がわからないときはDocker Logを下記コマンドで出力することができます!

docker logs コンテナ名

今回の場合はmysqlコンテナのLogが見たいので、下記のような記述になります。

docker logs mysql
==================
【実行結果】
2022-02-23 08:31:49+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
2022-02-23 08:31:49+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-02-23 08:31:49+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
2022-02-23 08:31:49+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of the following:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD

下記のようなエラーログが出ていることがわかりますね!

2022-02-23 08:31:49+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified

データベースのパスワードオプションが指定されていませんという内容のエラーが出力されています。

You need to specify one of the following:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD

次のいずれかのパスワードオプションを設定してくださいと教えてくれていますね!

Logの内容に従ってDocker-compose.ymlを修正する

Logで指摘されたデータベースのパスワードオプションをymlファイルに追記してみます。

version: "3.8"
services:
web:
build: ./container/php
container_name: app
ports:
- 8080:8080
volumes:
- ./src:/var/www/html/
working_dir: /var/www/html/
db:
build: ./container/mysql
container_name: mysql
ports:
- 3306:3306
environment:
MYSQL_DATABASE: public
MYSQL_ROOT_PASSWORD: Test1111 <-ここにパスワードオプションを追加
MYSQL_USER: iwama
MYSQL_PASSWORD: Test1111
node:
build: ./container/node
container_name: node
ports:
- 81:81
volumes:
- ./src:/var/www/html/
working_dir: /var/www/html/
tty: true

もう一度コンテナをビルド&アップしてみます

docker-compose up -d --build

そしてDockerのステータスを確認します。

docker-compose ps
=================
【実行結果】
app docker-php-entrypoint apac ... Up 80/tcp, 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
node docker-entrypoint.sh node Up 0.0.0.0:81->81/tcp,:::81->81/tcp

無事にmysqlコンテナも立ち上がりました!

おまけ

DockerLogは下記コマンドでも出すことができます。

docker-compose logs
===================
Name Command State Ports
--------------------------------------------------------------------------------------------------
app | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.23.0.3. Set the 'ServerName' directive globally to suppress this message
app | [Wed Feb 23 12:33:53.136371 2022] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.51 (Debian) PHP/7.4.25 configured -- resuming normal operations
app | [Wed Feb 23 12:33:53.136395 2022] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
node | Welcome to Node.js v17.5.0.
node | Type ".help" for more information.
mysql | 2022-02-23 12:33:52+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
mysql | 2022-02-23 12:33:52+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysql | 2022-02-23 12:33:52+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
mysql | 2022-02-23 12:33:52+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
mysql | You need to specify one of the following:
mysql | - MYSQL_ROOT_PASSWORD
mysql | - MYSQL_ALLOW_EMPTY_PASSWORD
mysql | - MYSQL_RANDOM_ROOT_PASSWORD

Docker Logs コマンドと違ってコンテナすべてのLogを一気に出力することができます!!

最後に

Logはシステム開発にとって欠かせない情報源です。
駆け出しエンジニアにはログを見る習慣をつけることが、大切だと感じる今日この頃です。

最後にこの言葉で締めたいと思います。「Logは友達怖くない!

ロジカルスタジオではバックエンドエンジニアを募集しています。
もうすでにLogと友達になっている方、これから友達になろうとしている方、
ご応募お待ちしています↓↓↓

PHPエンジニア
即戦力募集中!PHPで世界をちょっとよくしたいエンジニアをWanted!
ロジカルスタジオは、テクノロジーとデザインの視点からクライアントの課題解決をめざす、大阪のクリエイティブプロダクションです。 クライアントの期待を超えて「もっと良くなる、を見つける」のが私たちのスタイル。企画・提案からデザイン制作・システム構築、運用、改善提案をワンストップで行えるのが一番の強みです。近年ではその実績と品質が評価され、案件も急増しています。 代表の古川が掲げる企業理念は「絆を大切に、周りの人を豊かにし、社会に貢献する」。 私たちはこのミッションを推進するため、「新しい技術へのチャレンジ精神」を軸に、「切磋琢磨する仲間」と「働きやすい職場環境」を整え、「成長と可能性を大切にする風土」を育ててきました。 2019年9月に増床し、外部向けのセミナーにも活用できるカンファレンスルームを拡充。スタッフによる公式ブログや、マスコットキャラクター「ロージー&カール」によるTwitterなど、情報発信も強化しています。 可能性の芽をすくい上げられるこの場所を、より大きくしていきたい。 私たちと一緒に、このビジョンを実現しませんか。
株式会社ロジカルスタジオ
株式会社ロジカルスタジオでは一緒に働く仲間を募集しています
2 いいね!
2 いいね!
同じタグの記事
今週のランキング