前提・実現したいこと
- 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
あなたの回答
tips
プレビュー