[英]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.