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

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

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

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

4726閲覧

Docker構成のDjangoコンテナがMySQLコンテナに接続できない

tmasuyama

総合スコア1

docker-compose

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/10/10 07:14

前提・実現したいこと

Docker 構成の Django を CircleCI 経由でデプロイすることが目的です。

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

"git push origin main" から修正したコードを github に push したあとに CircleCI の Pipeline が走るのですが
docker-compose 経由での migrate に失敗してしまいます。
データベースへの接続に失敗しているエラーメッセージが確認できます。

django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")

試したこと

  • "docker-compose up -d" 実行後に待機時間を設定 → migrate 失敗
  • "docker-compose up -d" の前に "docker-compose build" を先に実行 → migrate 失敗
  • ローカル環境で migrate した時に問題がないかを確認 → migrate 成功

該当のソースコード

django:docker

1version: '3' 2 3services: 4 nginx: 5 image: nginx:1.13 6 ports: 7 - "80:8000" 8 volumes: 9 - ./nginx/conf:/etc/nginx/conf.d 10 - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params 11 - ./static:/static 12 depends_on: 13 - python 14 15 db: 16 image: mysql:5.7 17 container_name: db 18 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 19 ports: 20 - "3306:3306" 21 env_file: ./.env 22 environment: 23 MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD 24 MYSQL_DATABASE: $MYSQL_DATABASE 25 MYSQL_USER: $MYSQL_USER 26 MYSQL_PASSWORD: $MYSQL_PASSWORD 27 TZ: 'Asia/Tokyo' 28 volumes: 29 - ./mysql:/var/lib/mysql 30 - ./sql:/docker-entrypoint-initdb.d 31 32 python: 33 build: ./python 34 env_file: ./.env 35 command: uwsgi --socket :8001 --module config.wsgi --py-autoreload 1 --logto /tmp/mylog.log 36 volumes: 37 - ./src:/code 38 - ./static:/static 39 expose: 40 - "8001" 41 depends_on: 42 - db

circleci:

1# circleCIのバージョン指定 2version: 2 3jobs: 4 build: 5 machine: 6 image: circleci/classic:edge 7 steps: 8# Djangoのテストを実行 9 - checkout 10 - run: 11 name: make env file # 各種環境変数 12 command: | 13 echo DEBUG=${DEBUG} > .env 14 echo SECRET_KEY=${SECRET_KEY} >> .env 15 echo MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} >> .env 16 echo MYSQL_DATABASE=${MYSQL_DATABASE} >> .env 17 echo MYSQL_USER=${MYSQL_USER} >> .env 18 echo MYSQL_PASSWORD=${MYSQL_PASSWORD} >> .env 19 - run: 20 name: cp env file to src directory 21 command: cp .env src/.env 22 - run: 23 name: check file list in project directory 24 command: ls -a 25 - run: 26 name: check file list in src directory 27 command: ls src -a 28 - run: 29 name: docker-compose up 30 # command: docker-compose up -d 31 command: docker-compose up -d 32 - run: 33 name: sleep for launch db to migrate at Django # db コンテナが立ち上がるまで待機 34 command: sleep 300 35 - run: 36 name: migrate 37 command: docker-compose run python ./manage.py migrate # ここで毎回失敗 38 39#### 以下省略 ####

Django:

1... 2 3DATABASES = { 4 'default': { 5 'ENGINE': 'django.db.backends.mysql', 6 'NAME': env.get_value('MYSQL_DATABASE'), 7 'USER': env.get_value('MYSQL_USER'), 8 'PASSWORD': env.get_value('MYSQL_PASSWORD'), 9 'HOST': 'db', 10 'POST': 3306 11 } 12} 13...

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

python コンテナには requirements.txt で各種ライブラリをインポートしています。

Django:

1Django==2.2.14 2uwsgi==2.0.17 3mysqlclient 4django-allauth==0.40.0 5django-environ 6django-debug-toolbar

また、Python の Dockerfile はこのようになっています。

Django:

1FROM python:3.7 2ENV PYTHONUNBUFFERED 1 3RUN mkdir /code 4WORKDIR /code 5ADD requirements.txt /code/ 6RUN pip install -r requirements.txt 7ADD . /code/

初めての teratail での質問でして、至らないところもあると思いますが
何卒アドバイスをいただけますと幸いでございます。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ご回答いただきありがとうございます!
dockerize でコンテナの起動を必ず待つようにすることで問題を解決することが出来ました。
本当にありがとうございました。

投稿2020/10/15 13:30

tmasuyama

総合スコア1

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

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

0

ベストアンサー

そもそもの根本原因としてDBの立ち上がりが遅いことが原因なのかネットワークの問題なのかわかってませんが、dockerizeというバイナリを使うと良いかもしれません。
https://qiita.com/Aruneko/items/971e65a945d23f7bb8b6

投稿2020/10/14 10:01

inductor

総合スコア428

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問