前提・実現したいこと
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 での質問でして、至らないところもあると思いますが
何卒アドバイスをいただけますと幸いでございます。
何卒よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。