본문 바로가기
소프트웨어 마에스트로/개발

[개발 관련] docker compose 문제

by alpakaka 2024. 7. 6.

기존 docker compose

version: '3.8'  

services:  
  db:  
    image: mysql:latest  
    container\_name: mysql  
    ports:  
      - 3306:3306  
    volumes:  
      - mysql-data:/var/lib/mysql  
    environment:  
      MYSQL\_ROOT\_PASSWORD: {PASSWORD}  
      MYSQL\_DATABASE: {DATABASE}  
    networks:  
      - django-network  

  app:  
    build:  
      context: .  
    ports:  
      - 8000:8000  
    container\_name: onestep\_alpha  
    environment:  
      MYSQL\_ROOT\_PASSWORD: {PASSWORD}  
      MYSQL\_HOST: db  
    depends\_on:  
      - db  
    networks:  
      - django-network  

networks:  
  django-network:  

volumes:  
  mysql-data:

에러내용


onestep\_alpha     | Watching for file changes with StatReloader

mysql-earthyoung  | 2024-07-05T13:32:51.644507Z 1 \[System\] \[MY-013577\] \[InnoDB\] InnoDB initialization has ended.

onestep\_alpha     | Exception in thread django-main-thread:

onestep\_alpha     | Traceback (most recent call last):

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 275, in ensure\_connection

onestep\_alpha     |     self.connect()

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner

onestep\_alpha     |     return func(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 256, in connect

onestep\_alpha     |     self.connection = self.get\_new\_connection(conn\_params)

onestep\_alpha     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner

onestep\_alpha     |     return func(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/mysql/base.py", line 256, in get\_new\_connection

onestep\_alpha     |     connection = Database.connect(\*\*conn\_params)

onestep\_alpha     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/MySQLdb/\_\_init\_\_.py", line 121, in Connect

onestep\_alpha     |     return Connection(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/MySQLdb/connections.py", line 195, in \_\_init\_\_

onestep\_alpha     |     super().\_\_init\_\_(\*args, \*\*kwargs2)

onestep\_alpha     | MySQLdb.OperationalError: (2002, "Can't connect to server on 'mysql-earthyoung' (115)")

onestep\_alpha     | 

onestep\_alpha     | The above exception was the direct cause of the following exception:

onestep\_alpha     | 

onestep\_alpha     | Traceback (most recent call last):

onestep\_alpha     |   File "/usr/local/lib/python3.12/threading.py", line 1073, in \_bootstrap\_inner

onestep\_alpha     |     self.run()

onestep\_alpha     |   File "/usr/local/lib/python3.12/threading.py", line 1010, in run

onestep\_alpha     |     self.\_target(\*self.\_args, \*\*self.\_kwargs)

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/utils/autoreload.py", line 64, in wrapper

onestep\_alpha     |     fn(\*args, \*\*kwargs)

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/core/management/commands/runserver.py", line 136, in inner\_run

onestep\_alpha     |     self.check\_migrations()

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 581, in check\_migrations

onestep\_alpha     |     executor = MigrationExecutor(connections\[DEFAULT\_DB\_ALIAS\])

onestep\_alpha     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/executor.py", line 18, in \_\_init\_\_

onestep\_alpha     |     self.loader = MigrationLoader(self.connection)

onestep\_alpha     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/loader.py", line 58, in \_\_init\_\_

onestep\_alpha     |     self.build\_graph()

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/loader.py", line 235, in build\_graph

onestep\_alpha     |     self.applied\_migrations = recorder.applied\_migrations()

onestep\_alpha     |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/recorder.py", line 89, in applied\_migrations

onestep\_alpha     |     if self.has\_table():

onestep\_alpha     |        ^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/recorder.py", line 63, in has\_table

onestep\_alpha     |     with self.connection.cursor() as cursor:

onestep\_alpha     |          ^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner

onestep\_alpha     |     return func(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 316, in cursor

onestep\_alpha     |     return self.\_cursor()

onestep\_alpha     |            ^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 292, in \_cursor

onestep\_alpha     |     self.ensure\_connection()

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner

onestep\_alpha     |     return func(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 274, in ensure\_connection

onestep\_alpha     |     with self.wrap\_database\_errors:

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/utils.py", line 91, in \_\_exit\_\_

onestep\_alpha     |     raise dj\_exc\_value.with\_traceback(traceback) from exc\_value

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 275, in ensure\_connection

onestep\_alpha     |     self.connect()

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner

onestep\_alpha     |     return func(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 256, in connect

onestep\_alpha     |     self.connection = self.get\_new\_connection(conn\_params)

onestep\_alpha     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner

onestep\_alpha     |     return func(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/mysql/base.py", line 256, in get\_new\_connection

onestep\_alpha     |     connection = Database.connect(\*\*conn\_params)

onestep\_alpha     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/MySQLdb/\_\_init\_\_.py", line 121, in Connect

onestep\_alpha     |     return Connection(\*args, \*\*kwargs)

onestep\_alpha     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^

onestep\_alpha     |   File "/usr/local/lib/python3.12/site-packages/MySQLdb/connections.py", line 195, in \_\_init\_\_

onestep\_alpha     |     super().\_\_init\_\_(\*args, \*\*kwargs2)

onestep\_alpha     | django.db.utils.OperationalError: (2002, "Can't connect to server on 'mysql-earthyoung' (115)")

DB에 연결이 안되서 오류가 발생한다는 내용이였다.

해결 참고 블로그 링크

https://medium.com/@akshatgadodia/dockerizing-a-django-and-mysql-application-a-step-by-step-guide-d4ba181d3de5

 

Dockerizing a Django and MySQL Application: A Step-by-Step Guide

Docker has revolutionized the way we build, ship, and run applications. It provides a consistent and reliable environment for your…

medium.com

 

수정된 docker compose 파일


version: "3.8"

services:

  db:

    image: mysql:latest

    container\_name: mysql

    restart: always

    volumes:

      \- data:/var/lib/mysql

    environment:

       MYSQL\_ROOT\_PASSWORD: ${MYSQL\_ROOT\_PASSWORD}

       MYSQL\_DATABASE: ${MYSQL\_DATABASE}

       MYSQL\_USER: ${MYSQL\_USER}

       MYSQL\_PASSWORD: ${MYSQL\_PASSWORD}

    ports:

      \- "3306:3306"

    \# healthcheck:

    \#   test:

    \#     \[

    \#       "CMD",

    \#       "mysql",

    \#       "-h",

    \#       "localhost",

    \#       "-u",

    \#       "root",

    \#       "-p{MYSQL\_ROOT\_PASSWORD}",

    \#       "-e",

    \#       "SELECT 1",

    \#     \]

    \#   timeout: 5s

    \#   retries: 5

  backend:

    build:

      context: .

      dockerfile: Dockerfile

    command: sh -c "python3 manage.py migrate --noinput && python manage.py runserver 0.0.0.0:8000"

    restart: always

    volumes:

      \- .:/app

    ports:

      \- "8000:8000"

    env\_file:

      \- .env

    depends\_on:

      \- db

      \# db:

      \#   \# condition: service\_healthy

volumes:

  data:

해결되었다! healthcheck 가 너무 오랜 시간이 걸려서 그냥 주석처리 하고 해결했다!