![](/img/trans.png)
[英]I can not Dockerize MySQL and Django App using docker-compose
[英]Dockerize a Django app with a MySQL container
我有一个在 Django (2.2.7) 中开发的应用程序,使用 python (3.8.0)、Docker (19.03.5) 和 docker-compose (1.25.2) 在 Windows 10 专业版中运行。 我想通过更改 MySQL 数据库的 sqlite3 数据库来对它进行 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 工作并且应用程序启动,但问题是未创建数据库中的表。 我已经尝试过这些如何使用 docker-compose 在 MySQL 中添加表、 为 Dockerized Django 应用程序播种 MySQL 数据库或为 Dockerized Django 应用程序播种 MySQL 数据库,但我无法修复它。
如何在运行 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
除非您想完全擦除所有数据并重新开始,否则不应重置迁移。 您的迁移应该事先存在。 所以如果你不介意旧的迁移,你可以删除它们并使用python manage.py makemigrations
然后继续以下步骤:
因此,如果您的应用程序此时启动,我们需要以使用 entrypoint.sh 的方式更新您的 docker-compose 文件。 ENTRYPOINT 允许您配置将作为可执行文件运行的容器。 首先,在与docker-compose.yaml
相同的级别上创建entrypoint.sh
文件。 接下来,不要忘记添加chmod +x entrypoint.sh
以便可以执行entrypoint
入口点.sh文件:
#!/bin/bash
set -e
echo "${0}: running migrations."
python manage.py migrate --noinput
echo "${0}: collecting statics."
python manage.py collectstatic --noinput
python manage.py runserver 0.0.0.0:8000
之后更新您docker-compose.yaml
文件。 将command
行更改为:
command:
- /bin/sh
- '-c'
- '/code/entrypoint.sh'
此外,您应该将所有 pip 要求存储在requirements.txt
文件中,并在您的Dockerfile
运行pip install -r requirements.txt
您可以使用命令pip freeze > requirements.txt
转储您的 pip pip freeze > requirements.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.