[解決済み] Docker-Compose使用時にDjangoデータベースのマイグレーションをどのように行うか?
質問内容
私は、Docker Django/PostgreSQLアプリを、以下のように綿密にセットアップしました。 Docker サイトの Django Quick Start の手順 .
初めて Django の manage.py migrate を実行するとき、コマンドを使って
sudo docker-compose run web python manage.py migrate
は、期待通りに動作しています。データベースはDockerのPostgreSQLコンテナの中にうまく構築されています。
Djangoアプリ自体に加えた変更も同様に、保存した瞬間にDocker Djangoコンテナに反映されます。素晴らしいことです!
しかし、Django でモデルを変更し、そのモデルに合わせて Postgres データベースを更新しようとすると、変更が検出されないので、何度実行しても移行が行われないのです。
makemigrations
または
migrate
をもう一度。
基本的に、Django のモデルを変更するたびに、Docker コンテナを削除する必要があります (
sudo docker-compose rm
を作成し、新しいマイグレーションを開始します。
私はまだDockerについて理解しようとしていて、その仕組みについて理解できないことが非常に多いのですが、この件に関しては気が狂いそうです。なぜmigrateは私の変更を見ないのでしょうか?私は何を間違えているのでしょうか?
解決方法は?
実行中のDockerコンテナにログインして、コマンドを実行するだけです。
-
スタックを構築する :
docker-compose build -f path/to/docker-compose.yml
-
スタックを起動する :
docker-compose up -f path/to/docker-compose.yml
-
dockerで動作中のコンテナを表示する :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fcc49196a84 ex_nginx "nginx -g 'daemon off" 3 days ago Up 32 seconds 0.0.0.0:80->80/tcp, 443/tcp ex_nginx_1
66175bfd6ae6 ex_webapp "/docker-entrypoint.s" 3 days ago Up 32 seconds 0.0.0.0:32768->8000/tcp ex_webapp_1
# postgres docker container ...
- を取得します。 コンテナID にログインしてください。
docker exec -t -i 66175bfd6ae6 bash
-
これでログインできたので、右のフォルダーに移動してください。
cd path/to/django_app
-
そして今、モデルを編集するたびに、コンテナ内で実行する:
python manage.py makemigrations
とpython manage.py migrate
また、django の docker コンテナファイルを自動的に実行するために、 docker-entrypoint を使用することをお勧めします :
- 静態
- マイグレート
- ランサーバー またはgunicornやuWSGIで起動します。
以下はその例です(
docker-entrypoint.sh
) :
#!/bin/bash
# Collect static files
echo "Collect static files"
python manage.py collectstatic --noinput
# Apply database migrations
echo "Apply database migrations"
python manage.py migrate
# Start server
echo "Starting server"
python manage.py runserver 0.0.0.0:8000
関連
-
6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] Docker-Composeを使用して、複数のコマンドを実行する方法
-
[解決済み】docker-composeで単一のコンテナを再起動する方法
-
[解決済み】特定のコンテナのみdocker-composeを立ち上げる。
-
[解決済み] Django REST Framework: ModelSerializerに追加フィールドを追加する
-
[解決済み] DjangoとReactJSを連携させる方法とは?
-
[解決済み] シグナルハンドラは django プロジェクトのどこにあるべきですか?
-
[解決済み] Docker-Compose使用時にDjangoデータベースのマイグレーションをどのように行うか?
-
[解決済み] Django モデルで外部キーフィールドをオプションにすることはできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Djangoでファイルをアップロードする方法は?[クローズド]。
-
[解決済み] QuerySetで空白またはNULLの名前をフィルタリングする方法は?
-
[解決済み] (13: Permission denied) 上流:[nginx]に接続中。
-
[解決済み] [Solved] カスタムDjango manage.pyコマンドをテストドライバから直接呼び出すにはどうしたらいいですか?
-
[解決済み] シグナルハンドラは django プロジェクトのどこにあるべきですか?
-
[解決済み] django で複数のオブジェクトを削除する
-
[解決済み] django のクラスベースのビューで permission_required デコレータを使用する方法
-
[解決済み] egg_infoエラーでpipからインストールできない
-
[解決済み] django のテンプレートで最初の文字を大文字にする
-
[解決済み] ブロック %} に上書きではなく、追加することはできますか?