python - 使用 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-compose,Seeding a MySQL DB for a Dockerized Django App或Seeding a MySQL DB for a Dockerized Django App但我还不能修复它。
如何在运行 docker-compose 时在 MySQL db 容器中创建所需的表?我必须手动添加每个表还是有办法从 django 应用程序自动添加?
谢谢
解决方案
嗨,我认为这个答案可以帮助您 ##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
推荐阅读
- android - 无法升级 gradle Android Studio 3.4.,Gradle 5 依赖项随机中断
- wordpress - WooCommerce 中的 PayPal 问题
- tensorflow - 为什么 LSTM Output_shape 与 input_shape 不同
- android - Facebook 横幅、插页式广告和奖励广告在片段中加载
- c# - 如何按顺序获得每个学生的最高分
- ionic-framework - 如何使用 ImagePicker 在 Ionic Native 中选择图像并显示
- objective-c - EXC_BAD_ACCESS 在类继承 RCTEventEmitter 中获取静态 NSString 变量的值时
- jquery - 为什么我的代码不向表格元素追加新行?
- flutter - 颤振间隔器与扩展
- python - 没有用户状态上下文可用谷歌云数据流?