栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我无法通过“ docker

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我无法通过“ docker

docker-compose运行创建新容器

您已经注意到了问题。使用时

docker-compose run
,将创建一个新容器。

当您运行第一个命令(makemigrations)时,将创建一个新容器,运行makemigrations,并将迁移文件写入到(新)容器的文件系统中。

当您运行第二个命令(迁移)时,将创建另一个新容器。迁移进行了,但是没有任何关系。那是因为迁移文件不可用-它们是用不同于此新文件的容器编写的。

您可以通过两种方法解决此问题。

使用docker-compose exec

首先,您可以做已经做的事情,但是要使用

docker-compose exec
代替
run

docker-compose exec web python manage.py makemigrations docker-compose exec web python manage.py migrate

exec
将使用已经在运行的容器,而不是创建新的容器。

使用入口点脚本

另一种选择是在服务器启动之前,使用入口点脚本并在其中运行迁移。如果您希望事情变得更加自动化,这就是方法。

Dockerfile:

COPY entrypoint.sh /entrypoint.shRUN chmod +x /entrypoint.sh

entrypoint.sh:

#!/bin/shpython manage.py makemigrationspython manage.py migrateexec "$@"

docker-compose.yml(在’web’下):

entrypoint: /entrypoint.sh

在这种情况下,当容器启动时,入口点脚本将运行,处理您的迁移,然后移交给

command
(在本例中为Django
runserver
)。

新的容器永远循环

如您所见,新容器保持运行状态。这通常是意外的,因为您用应该退出(而不是保持运行)的命令覆盖了该命令。但是,在docker-
compose.yml中,您指定了

restart: always
。因此,他们将一遍又一遍地运行迁移命令,并在每次退出时重新启动。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378319.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号