どうも!バックエンドエンジニアとして活動しているがんちゃんです!!
バックエンドエンジニア
がんちゃん
寒い日布団の重力に負けがちです!
あ~~冬眠したい!!
バックエンドエンジニア
がんちゃん
さて今回は、Dockerのlogを見ることで環境構築の躓きを解決する記事になります。
ではよろしくお願いします!!
環境情報
Docker version 20.10.8
環境構築実施
下記Docker-compose.ymlで環境を構築します。
今回の作成コンテナは下記3つのコンテナになっています。
-
appコンテナ(アプリケーション用)
- mysqlコンテナ(DB用)
- 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と友達になっている方、これから友達になろうとしている方、
ご応募お待ちしています↓↓↓