겪었던 오류
django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")
hanbindev
2021. 5. 31. 19:11
docker-compose
로 개발환경을 구축하기 위해 아래와 같이 docker-compose.dev.yml
파일을 작성했었다.
version: "2"
services:
db:
image: mysql:5.7.34
container_name: dorandoran_db
ports:
- "7001:3306"
environment:
- MYSQL_DATABASE=dorandoran_dev_db
- MYSQL_USER=devuser
- MYSQL_PASSWORD=password
- MYSQL_ROOT_PASSWORD=password
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 20s
retries: 10
web:
build:
context: .
dockerfile: ./compose/develop/Dockerfile-dev
volumes:
- ./:/app/
command:
- bash
- -c
- |
python dorandoran/manage.py migrate
python dorandoran/manage.py runserver 0.0.0.0:8000
container_name: dorandoran_web
env_file:
- dev.env
depends_on:
db:
condition: service_healthy
restart: always
ports:
- "8000:8000"
분명 web
이 db
에 의존하고 있음을 명시하고 healthcheck까지 붙여줬는데 왜 안되는지 이해가 안됐다.
문제는 dev.env
파일에 있었다.
DJANGO_DB_HOST=db
DJANGO_DB_PORT=7001 # 이곳
DJANGO_DB_NAME=dorandoran_dev_db
DJANGO_DB_USERNAME=root
DJANGO_DB_PASSWORD=password
web
컨테이너가 db
컨테이너에 접근 할 때의 포트를 외부 포트(7001)로 지정해 줬던 것이다.
내부 포트인 3306
으로 바꾸니 제대로 동작하였다.
DJANGO_DB_HOST=db
DJANGO_DB_PORT=3306 # 잘 된다!
DJANGO_DB_NAME=dorandoran_dev_db
DJANGO_DB_USERNAME=root
DJANGO_DB_PASSWORD=password