首页 > 解决方案 > 使用 MySQL 容器对 Django 应用程序进行 Dockerize

问题描述

我有一个在 Django (2.2.7) 中开发的应用程序,在 Windows 10 pro 中运行 python (3.8.0)、Docker (19.03.5) 和 docker-compose (1.25.2)。我想通过将 sqlite3 数据库更改为 MySQL 数据库来对其进行 Dockerize 化。我已经写了这个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 工作并且应用程序启动,但问题是数据库中的表没有创建。我已经尝试过这些How do I add a table in MySQL using docker-composeSeeding a MySQL DB for a Dockerized Django AppSeeding a MySQL DB for a Dockerized Django App但我还不能修复它。

如何在运行 docker-compose 时在 MySQL db 容器中创建所需的表?我必须手动添加每个表还是有办法从 django 应用程序自动添加?

谢谢

标签: pythonmysqldjangodockerdocker-compose

解决方案


嗨,我认为这个答案可以帮助您 ##1.- 重置所有迁移

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc"  -delete

##2.- 再次查看并应用您的迁移

python manage.py showmigrations
python manage.py makemigrations
python manage.py migrate

推荐阅读