Я читал статью в здесь о настройке проекта с использованием docker, django и mysql вместе.
это мои файлы в проекте:
Dockerfile
FROM python:3.7
MAINTAINER masoud masoumi moghadam
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
ADD . /app
ADD requirements.txt /app/requirements.txt
RUN pip install --upgrade pip && pip install -r requirements.txt
Docker-compose
version: "3"
services:
app:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py runserver 0.0.0.0:8000"
environment:
- DB_HOST=localhost
- DB_NAME=contact_list
- DB_USER=root
- DB_PASS=secretpassword
depends_on:
- db
db:
image: mysql:5.7
environment:
- MYSQL_DATABASE=contact_list
- MYSQL_USER=root
- MYSQL_PASSWORD=secretpassword
требования
Django>=2.0,<3.0
djangorestframework<3.10.0
mysqlclient==1.3.13
django-mysql==2.2.0
итакже эти настройки в моем setting.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': os.environ.get('DB_HOST'),
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_PASS')
}
}
Когда я использую docker-compose build
, у меня нет проблем, и все просто отлично. Тогда я бегу service mysql start
. Я могу заверить, что служба mysql запущена и работает, потому что у меня есть доступ к наборам данных. Проблема возникает, когда я выполняю миграцию с помощью этой команды docker-compose run app sh -c "python manage.py makemigrations core"
Я получаю эту ошибку:
django.db.utils.OperationalError: (2002,
"Can't connect to local MySQL server through socket
'/var/run/mysqld/mysqld.sock' (2)")
Когда я изменяю localhost
на 127.0.0.1
Я получаю эту ошибку:
django.db.utils.OperationalError:
(2002, "Can't connect to MySQL
server on '127.0.0.1' (115)")
Я потратил 20 часов на поиски наилучшей конфигурации для этих технологий, но я до сих пор ничего не могу понять. Я также использовал python-alpine, но все еще не мог найти его полезным для проекта, потому что у меня была та же проблема с зависимостями mysql, когда я пытался сделать docker build
. У кого-нибудь есть такой же опыт? Буду признателен, если вы поможете мне здесь.