DockerでLEMP環境を構築するもdbコンテナがすぐに終了してしまう
Q&A
Closed
解決したいこと
【導入編】絶対に失敗しないDockerでLaravel + Vue.jsの開発環境(LEMP環境)を構築する方法〜MacOS Intel Chip対応〜 | yutaro blog
上記Webサイトを参考にしてDockerを用いたLEMP環境を構築したいのですが、
ビルドは正常に完了するにもかかわらず、dbコンテナがすぐに終了してしまいます。
解決策をご存じの方がいましたらご教示いただけますでしょうか?
よろしくお願いいたします。
環境
- Ubuntu 22.04 LTS
- Docker 20.10.17
- Docker Compose 1.29.2
発生している問題・エラー
下記画像はコンテナ起動後に「docker ps -a」を実行したときの様子です。
「docker logs dbコンテナID」を実行すると下記画像のメッセージがずらっと表示されます。
試したこと
- コンテナ削除
- イメージ削除
- ネットワーク削除
- ボリューム削除
各種ファイルの配置
docker-original
├─ docker
│ ├─ php
│ │ └─ Dockerfile … (2)
│ │ └─ php.ini … (3)
│ ├─ nginx
│ │ └─ Dockerfile … (4)
│ │ └─ default.conf … (5)
│ └─ mysql
│ └─ Dockerfile … (6)
│ └─ my.cnf … (7)
├─ src
│─ .env … (8)
│─ .gitignore
└─ docker-compose.yml … (1)
設定値
各種ファイルの設定値は下記のとおりです。
※長いので折りたたんでいます。
設定値はコチラ
(1) docker-compose.yml
version: '3.8'
volumes:
mysql-volume:
services:
app:
build:
context: .
dockerfile: ./docker/php/Dockerfile
volumes:
- ./src/:/var/www/html
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=${DB_NAME}
- DB_USERNAME=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
web:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
ports:
- ${WEB_PORT}:80
depends_on:
- app
volumes:
- ./src/:/var/www/html
db:
build:
context: .
dockerfile: ./docker/mysql/Dockerfile
ports:
- ${DB_PORT}:3306
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
TZ: 'Asia/Tokyo'
volumes:
- mysql-volume:/var/lib/mysql
(2) Dockerfile (php)
FROM php:7.4.1-fpm
# COPY php.ini
COPY ./docker/php/php.ini /usr/local/etc/php/php.ini
# Composer install
COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer
# install Node.js
COPY --from=node:10.22 /usr/local/bin /usr/local/bin
COPY --from=node:10.22 /usr/local/lib /usr/local/lib
RUN apt-get update && \
apt-get -y install \
git \
zip \
unzip \
vim \
&& docker-php-ext-install pdo_mysql bcmath
WORKDIR /var/www/html
(3) php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
(4) Dockerfile (nginx)
FROM nginx:1.18-alpine
ENV TZ=UTC
# nginx config file
COPY ./docker/nginx/*.conf /etc/nginx/conf.d/
WORKDIR /var/www/html
(5) default.conf
server {
listen 80;
root /var/www/html/public;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
(6) Dockerfile (mysql)
FROM mysql:8.0
ENV TZ=UTC
COPY ./docker/mysql/my.cnf /etc/my.cnf
(7) my.cnf
[mysqld]
user=mysql
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = mysql-general.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
(8) .env
WEB_PORT=8077
DB_PORT=3306
DB_NAME=laravel
DB_USER=user
DB_PASSWORD=****
DB_ROOT_PASSWORD=****