Ich habe einen Django-Dienst innerhalb von Docker, den ich für AWS Elastic Beanstalk bereitstelle.
Ich möchte meine Datenbankmigrationen zur Bereitstellungszeit ausführen
Wenn ich als "Python-Projekt" in EB bereitstellen würde, könnte ich Folgendes in meinem .ebextensions
:
Jedoch sind container_commands
für die EC2-Instanzen - und es ist im Docker-Container , dass ich meinen Code usw. habe.
Ich kann es nicht einfach zu meinem Dockerfile
hinzufügen, da es bei der Durchführung von Migrationen nur darum geht, auf der angehängten RDS-Instanz (von der Umgebung bereitgestellt) zu arbeiten - nicht wirklich "Bestandteil des Docker-Images"
Es scheint nichts Nützliches zu geben, das ich zu Dockerrun.aws.json
Ich könnte vielleicht den Docker-Bildnamen in meinem container_commands
identifizieren und dann docker run -ti $container-name python manage.py migrate
usw., aber keine Ahnung wie und es fühlt sich schrecklich hacky an
Ich könnte die Migrationen manuell ausführen
Ich könnte CMD gunicorn $etc
durch CMD $script
ersetzen, wo $script
Migrationen anwendet und dann Gunicorn startet.
Ideen sehr willkommen bitte!
Ich denke, die Verwendung von ENTRYPOINT in Dockerfile könnte Ihr Problem lösen.
Entweder können Sie ein Skript (das sich um Datenbankmigrationen kümmert, einen Webserver und andere Plausibilitätsprüfungen starten), die in Ihrem Container-Image erstellt wurden, aufrufen und dieses Skript in Dockerfile ENTRYPOINT aufrufen.
%Vor%Auf diese Weise wird das Skript nur ausgeführt, wenn Sie einen Container dieses Bildes erstellen.
Oder führen Sie die beiden Befehle (Python manage.py migrate & amp; & amp; & ndash; httpd start) mit ENTRYPOINT
ausSie könnten ein post-deploy-Skript wie folgt in Ihre .extenxtensions einfügen:
%Vor% Ich habe nur das Leader-Bit eingefügt, für den Fall, dass Sie eine Load-Balanced-Umgebung verwenden. Es werden keine Migrationen auf mehreren Servern gleichzeitig ausgeführt. Dies kann auch für den Befehl collectstatic
verwendet werden.
Tags und Links python django amazon-web-services docker