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

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

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

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

Django

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

MySQL

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

Docker

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

解決済

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

tmasuyama
tmasuyama

総合スコア1

docker-compose

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

Django

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

MySQL

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

Docker

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

2回答

0評価

0クリップ

3107閲覧

投稿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

version: '3' services: nginx: image: nginx:1.13 ports: - "80:8000" volumes: - ./nginx/conf:/etc/nginx/conf.d - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params - ./static:/static depends_on: - python db: image: mysql:5.7 container_name: db command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - "3306:3306" env_file: ./.env environment: MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD MYSQL_DATABASE: $MYSQL_DATABASE MYSQL_USER: $MYSQL_USER MYSQL_PASSWORD: $MYSQL_PASSWORD TZ: 'Asia/Tokyo' volumes: - ./mysql:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d python: build: ./python env_file: ./.env command: uwsgi --socket :8001 --module config.wsgi --py-autoreload 1 --logto /tmp/mylog.log volumes: - ./src:/code - ./static:/static expose: - "8001" depends_on: - db

circleci:

# circleCIのバージョン指定 version: 2 jobs: build: machine: image: circleci/classic:edge steps: # Djangoのテストを実行 - checkout - run: name: make env file # 各種環境変数 command: | echo DEBUG=${DEBUG} > .env echo SECRET_KEY=${SECRET_KEY} >> .env echo MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} >> .env echo MYSQL_DATABASE=${MYSQL_DATABASE} >> .env echo MYSQL_USER=${MYSQL_USER} >> .env echo MYSQL_PASSWORD=${MYSQL_PASSWORD} >> .env - run: name: cp env file to src directory command: cp .env src/.env - run: name: check file list in project directory command: ls -a - run: name: check file list in src directory command: ls src -a - run: name: docker-compose up # command: docker-compose up -d command: docker-compose up -d - run: name: sleep for launch db to migrate at Django # db コンテナが立ち上がるまで待機 command: sleep 300 - run: name: migrate command: docker-compose run python ./manage.py migrate # ここで毎回失敗 #### 以下省略 ####

Django:

... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': env.get_value('MYSQL_DATABASE'), 'USER': env.get_value('MYSQL_USER'), 'PASSWORD': env.get_value('MYSQL_PASSWORD'), 'HOST': 'db', 'POST': 3306 } } ...

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

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

Django:

Django==2.2.14 uwsgi==2.0.17 mysqlclient django-allauth==0.40.0 django-environ django-debug-toolbar

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

Django:

FROM python:3.7 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

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

Django

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

MySQL

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

Docker

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