Reputation: 25
I'm trying to create a docker environment for my django project
my dockerfile :
FROM python:3
ENV PYTHONUNBUFFERED=1
RUN apt-get install default-libmysqlclient-dev
RUN mkdir /config
ADD /config/requirements.txt /config/
RUN pip install -r /config/requirements.txt
RUN mkdir /src
WORKDIR /src
my docker-compose :
version: '3'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_DATABASE: ProjetDjango
container_name: mysql01
restart: always
nginx:
image: nginx:1.13-alpine
container_name: nginx01
ports:
- "8000:8000"
volumes:
- ./project:/src
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
container_name: django01
command: bash -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./project:/src
expose:
- "8000"
restart: always
my settings.py :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ProjetDjango',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
I've got this error while running : docker-compose up
django.db.utils.OperationalError: (2006, 'Can\'t connect to MySQL server on \'127.0.0.1\' (111 "Connection refused")') django01 exited with code 1
I've been working on this issue for 2 days now and didn't find a response that solve it!
Thank you for your help
Upvotes: 1
Views: 1949
Reputation: 368
When you link your db service to your web service in docker so you must use your db service name instead of your database server ip for connecting database :
db:
image: mysql
restart: unless-stopped
container_name: db_of_my_project
web:
build: .
container_name: django01
command: ...
links:
- db
volumes:
- ./project:/src
expose:
- "8000"
restart: always
and your database configuration:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ProjetDjango',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'db', # database container name
'PORT': '',
}
}
Upvotes: 2