質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

0回答

1379閲覧

EC2(Amazon Linux)上のdocker-composeで構築したMySQLコンテナが起動しない

tsoshiro

総合スコア8

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2021/01/05 15:05

編集2021/01/05 15:29

前提・実現したいこと

  • Flask製Webアプリを開発しています
  • 本番環境としては、EC2(Amazon Linux)内にdocker-composeで以下を構築しています
  • Appコンテナ: Flask + gunicorn
  • Webコンテナ: nginx
  • DBコンテナ: MySQL(8.0)

docker-compose build -dでDBコンテナが立ち上がらず、Dockerのログにエラーメッセージも出ていないため、手詰まり状態となっております。アドバイスいただけますと幸いです。
Appコンテナ、Webコンテナは立ち上がります。

発生している問題・エラーメッセージ

$ docker-compose build -d $ docker-compose ps Name Command State Ports ---------------------------------------------------------------------- flask python3 Up 5000/tcp mysql docker-entrypoint.sh mysqld Exit 1 nginx nginx -g daemon off; -c /e ... Up 0.0.0.0:8080->80/tcp $ docker-compose logs ... mysql | 2021-01-05 23:48:10+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.22-1debian10 started. mysql | 2021-01-05 23:48:11+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' mysql | 2021-01-05 23:48:11+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.22-1debian10 started.

該当のソースコード

プロジェクト構成(抜粋)

. ├── app │   ├── Dockerfile │   ├── log │   ├── requirements.txt │   └── src ├── docker-compose.yml ├── mysql │   ├── Dockerfile │   ├── envfile │   ├── logs │   ├── my.cnf │   ├── mysql_data │   └── sqls └── nginx    ├── Dockerfile    ├── log    └── nginx.conf

docker-compose.yml

yml

1version: '3' 2services: 3 db: 4 build: ./mysql/ 5 container_name: mysql 6 volumes: 7 - db-store:/var/lib/mysql # データの永続化 8 - db-log-store:/var/log/mysql 9 - ./mysql/sqls:/docker-entrypoint-initdb.d # 初期データ投入 10 environment: 11 - MYSQL_DATABASE=app 12 - TZ=Asia/Tokyo 13 networks: 14 - back 15 env_file: ./mysql/envfile 16 17 flask: 18 build: ./app/ 19 container_name: flask 20 volumes: 21 - ./app:/appname 22 - ./app/log/flask/gunicorn_access.log:/var/log/gunicorn_access.log 23 - ./app/log/flask/gunicorn_error.log:/var/log/gunicorn_error.log 24 environment: 25 TZ: Asia/Tokyo 26 FLASK_APP: run.py 27 FLASK_ENV: development # production / development 28 tty: true 29 links: 30 - db 31 expose: 32 - 5000 33 depends_on: 34 - db 35 networks: 36 - front 37 - back 38 39 nginx: 40 build: ./nginx/ 41 container_name: nginx 42 ports: 43 - "8080:80" 44 volumes: 45 - ./nginx/nginx.conf:/etc/nginx/nginx.conf 46 - ./nginx/log/nginx:/var/log/nginx 47 depends_on: 48 - flask 49 networks: 50 - front 51 52volumes: 53 db-store: 54 db-log-store: 55 56networks: 57 front: 58 driver: bridge 59 back: 60 driver: bridge

mysql/Dockerfile

Dockerfile

1FROM mysql:8.0 2EXPOSE 3306 3 4ADD ./my.cnf /etc/mysql/conf.d/my.cnf 5 6RUN mkdir /var/log/mysql 7RUN chown mysql:mysql /var/log/mysql 8 9CMD ["mysqld"]

mysql/sqls/initialize.sql

sql

1CREATE DATABASE IF NOT EXISTS app; 2use app;

mysql/envfile

MYSQL_ROOT_PASSWORD=XXX MYSQL_USER=XXX MYSQL_PASSWORD=XXX

app/Dockerfile

Dockerfile

1# ベースイメージ作成 2FROM python:3.7 3 4# requirements.txtをコピー 5COPY requirements.txt app/ 6 7# pipアップグレード 8RUN pip install --upgrade pip 9RUN pip install -r app/requirements.txt 10 11# 作業ディレクトリ指定 12WORKDIR /appname/app/src

nginx/Dockerfile

Dockerfile

1FROM nginx:1.17.9 2CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

試したこと

  • コンテナ、ボリューム、イメージをすべて削除してビルドし直し → 変わらず
$ docker ps -aq | xargs docker rm $ docker images -aq | xargs docker rmi $ docker volume rm $(docker volume ls -qf dangling=true) $ docker-compose build $ docker-compose up -d Creating network "XXX_back" with driver "bridge" Creating network "XXX_front" with driver "bridge" Creating volume "XXX_db-store" with default driver Creating volume "XXX_db-log-store" with default driver Creating mysql ... done Creating flask ... done Creating nginx ... done
  • docker単体での起動 → 起動しない

(docker run -it --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysqlと同じことを作成済みコンテナで起動する方法が分からず…)(参考)

$ docker start mysql mysql $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ... f6aed5b83dac XXX_db "docker-entrypoint.s…" 2 days ago Exited (1) 2 seconds ago mysql
  • 最初は、名前付きボリュームではなくホストのディレクトリをマウントする方式にしていました。全てのコンテナを起動させ、Flaskを動作させるところまではできていました。ただ、マウントしたディレクトリのPermission deniedエラーの対処が煩雑だったので、名前付きボリュームに切り替えようとしていました。
  • 全体的に、こちらの記事を参考にしています→ [Flask]Webアプリのサクッと作れる『docker-compose構成』をまとめてみた)

補足情報(FW/ツールのバージョンなど)

  • dockerバージョン : Docker version 19.03.13-ce, build 4484c46
  • docker-composeバージョン : docker-compose version 1.27.4, build 40524192
  • EC2バージョン : Amazon Linux AMI release 2018.03

開発環境

  • macOS High Sierra
  • MacBook Air

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問