我发现在容器化环境中处理数据库迁移的工作流程令人困惑。我有一个带有附加数据库的 Web API。API 在一个容器中运行,数据库在另一个容器中运行。项目文件结构如下
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker-compose.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 database\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 alembic/\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db.py\n| | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 models.py\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 other\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 source\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 files\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 other\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 files\nRun Code Online (Sandbox Code Playgroud)\n为了使 API 容器能够访问数据库,ini 文件中的 sqlalchemy.url 设置为:
\npostgresql://{username}:{password}@db:5432/{database}
但是,当我想要进行迁移时,例如添加表列,我会将app/database/models.py更改目录中的模型更改为app/database并运行alembic revision --autogenerate -m "Description"。这就是问题发生的地方,我收到错误:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "db" to address: Name or service not known\nRun Code Online (Sandbox Code Playgroud)\n如果我将主机名更改为 localhost,它可以工作,但 docker-compose 会中断,因为它必须引用容器名称。
\n这个工作流程似乎不正确。人们如何在使用容器的项目中使用数据库?
\n该docker-compose.yml …