在docker中运行django migrate
我正在使用docker构buildPython + Django开发环境。 我在docker-compose.yml中为Web服务器(nginx)和数据库(postgres)容器和一个使用uwsgi运行我们的应用程序的容器定义了Dockerfile文件和服务。 由于这是一个开发环境,我正在安装主机系统的应用程序代码,所以我可以在我的IDE中轻松编辑它。
我有的问题是/如何运行迁移命令。
如果你不知道Django,migrate命令将创build数据库结构,并在稍后根据项目的需要进行更改。 我已经看到人们运行迁移作为compose命令指令command: python manage.py migrate && uwsgi --ini app.ini
,但我不希望迁移到每个容器重新启动运行。 我只希望它创build容器时运行一次,除非重build,否则不会再运行。
哪里/我该怎么做?
编辑:组成团队现在有一个公开的问题。 运气好的话,一次命令容器就会被构成支持。 https://github.com/docker/compose/issues/1896
您不能使用RUN
因为正如您在运行容器期间所注释的源代码中提到的那样。
您不能使用CMD
,因为您不希望每次重新启动容器时都运行CMD
。
我build议在运行容器后手动使用docker exec
。 我不认为有一种方法可以在dockerfile
或者dockerfile
docker-compose
里面自动化,因为我上面给出了两个原因。
这听起来像你需要的是一个pipe理项目任务的工具。 dobi是一个旨在处理这些任务的工具(免责声明:我是这个工具的作者)。
你可以在这里看到一个如何运行迁移的例子: https : //github.com/dnephin/dobi/tree/master/examples/init-db-with-rails 。 这个例子使用rails,但是和django基本上是一样的。
您可以设置一个名为migrate
的任务,它将在容器中运行命令并将数据写入卷。 然后,当您启动docker-compose
容器时,请将该卷用作数据库服务的源。
docker exec -it container-name bash
然后你将在容器内部,并且你可以运行你通常在不使用docker的情况下开发的任何命令。
- Django – 默认端口0而不是3306 – 无法连接到“127.0.0.1”(61)上的MySQL服务器
- 当使用docker / fig运行Django dev服务器时,为什么一些日志输出被隐藏了?
- 如何使用密码保护弹性beanstalk docker nginx中部署的django web应用程序
- 使用预configuration的Docker容器进行Elastic Beanstalk Django部署
- docker-machine容器中缺less本地文件
- 如何在Docker容器中显示PostgreSQL数据库?
- 使用cosignfilter构buildApache,并在Docker容器中构builddjango项目的wsgi
- 在两个postgres数据库之间冲突,虽然有两个不同的docker – 为Django项目组成yaml文件
- 尝试使用Django的Docker,但服务器没有启动