도커 컴포즈) Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock

boingboing·2021년 12월 31일
1

도커 컴포즈로 세 개의 컨테이너(django, nginx, mariadb)를 동시에 실행 한 후 발생...ㅇ<-<

원인

우선 단계적으로 파악하기 위해서,
3개의 컨테이너를 동시에 실행하지 않고 django와 mariadb만 실행해 봄.

version: "2"
services:
        maria_db:
                image: mariadb:latest
                container_name: "maria_db"
                restart: always
                environment:
                        MYSQL_DATABASE: test_db
                        MYSQL_USER: test_user
                        MYSQL_PASSWORD: test_pass
                        MYSQL_ROOT_PASSWORD: test_pass

        django:
                build:
                        context: .
                        dockerfile: Dockerfile
                container_name: django
                command: python3 manage.py runserver 0.0.0.0:8006 --settings=test_project.settings.prod --noreload

                volumes:
                        - ./test_pj/static:/staticfiles
                ports:
                        - "8006:8006"
                depends_on:
                        - maria_db

동일한 에러가 발생 함... 결국 nginx나 uwsgi 문제는 아니었음.

처음부터 장고와 mysql 연결이 안 된 것..

해결

장고 세팅 파일을 수정하고 해결되었다!! (다른에러가 발생했지만)

우선 mysql socket을 못 찾는 문제는 없어졌따!!

settings.py

 DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db명',
        'USER': 'user명',
        'PASSWORD': 'password',
        'HOST': 'localhost', -> 'maria_db(db 컨테이너 명)' 
        'PORT': '3306'
        }
}

HOST를 localhost로 하면 localhost는 장고 컨테이너 자체의 포트를 찾는데 당연히 없음. mysql 컨테이너로 연결해주어야 mysql 컨테이너의 3306번 포트를 찾는다.

0개의 댓글