【发布时间】:2020-05-23 11:04:55
【问题描述】:
我有一个在 Django (2.2.7) 中开发的应用程序,其中 python (3.8.0)、Docker (19.03.5) 和 docker-compose (1.25.2) 在 Windows 10 pro 中运行。我想通过将 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 应用程序自动添加?
谢谢
【问题讨论】:
-
您需要运行迁移。
docker exec -it <web_app_id> bash然后运行 python manage.py migrate? -
我已经这样做了,
No migrations to apply.问题可能出在与数据库有关的问题上? -
您好手册,当您在终端中运行
docker-compose up时,您会返回什么错误或信息... -
嗨,没有错误,似乎一切正常,我可以访问应用程序的登录页面,实际上我可以访问管理员配置文件,因为已创建身份验证数据库并且我可以创建来自管理员或命令行的用户。探针是其他表,我在项目中定义的那些由于未知原因未在 MySQL 数据库中创建。
-
你是不是忘了在
settings.pysettings.py的INSTALLED_APPS中提到你的应用名称?
标签: python mysql django docker docker-compose