【发布时间】:2019-08-19 11:43:25
【问题描述】:
我有一个简单的 Flask 服务,它依赖于 Postgres 数据库,并且我正在使用 flask-migrate 来管理我的迁移。我知道我必须首先使用类似的方法在本地创建迁移脚本:
flask db init
flask db migrate
在我的web 服务Dockerfile 我在容器开始使用时发出flask db upgrade:
CMD flask db upgrade && flask run
我的docker-compose.yaml 是:
web:
build:
context: .
expose:
- "5000"
depends_on:
- db
db:
image: postgres
volumes:
- my_volume:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: 123456
对我来说唯一的要求是 migrate 不应该是自动化的(请参阅下面的注释),我尝试从主机运行它,但这不可能,因为数据库在容器上运行,这样做会引发以下错误:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "<Database Container name>" to address: Name or service not known
如何克服呢?我应该遵循什么机制来管理 docker 的迁移?
注意: Flask-migrate 表明迁移脚本需要在提交之前进行审查(所以我认为迁移的创建不能自动化):
迁移脚本需要审核和编辑,如 Alembic 目前无法检测到您对模型所做的每一项更改。在 特别是,Alembic 目前无法检测表名更改, 列名更改,或匿名命名的约束。
【问题讨论】:
标签: python docker flask flask-migrate