Dockerize приложение Django с контейнером MySQL - PullRequest
1 голос
/ 07 февраля 2020

У меня есть приложение, разработанное в Django (2.2.7) с python (3.8.0), Docker (19.03.5) и docker -композицией (1.25.2), работающее в Windows 10 про. Я хочу Dockerize это с изменением базы данных sqlite3 для базы данных MySQL. Я уже написал это Dockerfile:

FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN pip install --upgrade pip && pip install -r requirements.txt
RUN pip install mysqlclient
COPY . /code/

И этот файл docker-compose.yml:

version: '3'

services: 
  db:
    image: mysql:5.7
    ports:
      - '3306:3306'
    environment:
       MYSQL_DATABASE: 'my-app-db'
       MYSQL_USER: 'root'
       MYSQL_PASSWORD: 'password'
       MYSQL_ROOT_PASSWORD: 'password'
    volumes:
      - .setup.sql:/docker-entrypoint-initbd.d/setup.sql

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    links: 
      - db 

Кроме того, я изменил конфигурации базы данных по умолчанию в settings.py для этого:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my-app-db',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': 3306,
    }
}

После всего этого docker compose работает и приложение запускается, но проблема в том, что таблицы в базе данных не создаются. Я пытался с этими Как добавить таблицу в MySQL, используя docker -compose , Заполнение базы данных MySQL для Dockerized Django App или этой Заполнение базы данных MySQL для Dockerized Django приложения , но я пока не могу это исправить.

Как создать необходимые таблицы в контейнере MySQL db во время выполнения docker -составить? Нужно ли добавлять каждую таблицу вручную или есть способ сделать это из приложения django автоматически?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...