Postgresql 获得';无法翻译主机名“;db";解决';尝试创建数据库迁移时
我正在使用FastAPI和postgresql构建一个简单的python api后端。当我尝试构建数据库迁移文件(使用Alembic)时,出现以下错误: sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)无法将主机名“db”转换为地址:名称或服务未知 由于我搜索了很多关于这个问题的信息,这似乎是因为我的docker配置,但我无法找到它。这是我的docker编写代码:Postgresql 获得';无法翻译主机名“;db";解决';尝试创建数据库迁移时,postgresql,docker,sqlalchemy,alembic,fastapi,Postgresql,Docker,Sqlalchemy,Alembic,Fastapi,我正在使用FastAPI和postgresql构建一个简单的python api后端。当我尝试构建数据库迁移文件(使用Alembic)时,出现以下错误: sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)无法将主机名“db”转换为地址:名称或服务未知 由于我搜索了很多关于这个问题的信息,这似乎是因为我的docker配置,但我无法找到它。这是我的docker编写代码: version: '3.7' services: web
version: '3.7'
services:
web:
build: ./src
command: sh -c "alembic upgrade head && uvicorn app.main:app --reload --workers 1 --host 0.0.0.0 --port 8000"
volumes:
- ./src/:/usr/src/app/
ports:
- 8002:8000
environment:
- DATABASE_URL=postgresql://user:pass@db/my_db
db:
image: postgres:12.1-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=my_db
- POSTGRES_HOST_AUTH_METHOD=trust
ports:
- 5432:5432
volumes:
postgres_data:
我还怀疑我的另一个项目在本地机器中使用docker(与FastAPI、postgres和docker的设置相同),它工作正常,没有任何类似的问题
我应该检查和更改什么来解决问题
附言:我是docker的初学者。下面是发生的事情: 您的
web
容器正在尝试连接到db
,但db
尚未启动,简单地说web
无法“查看”db
简短的回答是:首先启动db
:docker compose up-d db
,然后启动web:docker compose up web
或您正在运行的任何程序
现在,答案很长。如果你继续回答这个简短的问题,没关系,但是如果你问我的话,这会很麻烦。您可以尝试将版本更改为2.x
例如2.4
,并将依赖于添加到web
,例如:
version: '2.4'
services:
web:
...
depends_on:
- db
db:
image: ...
...
如果您只是运行docker compose up…
,docker将首先启动db
现在,您可能遇到另一个问题:postgres可能还没有准备好接收连接。在这种情况下,您必须等待它准备好。您可以通过在出现错误时重试db连接(我不记得确切的错误,您必须检查文档)或使用类似于pg_isready
的方法来实现这一点。假设这是一个开发环境,您可以通过安装postgresql client
并将cmd更改为:
command: >
sh -c "
until pg_isready -q -h db; do sleep 1; done
&&
alembic upgrade head
&&
uvicorn app.main:app --reload --workers 1 --host 0.0.0.0 --port 8000"
你是怎么运行这个的?docker compose-up-build
@snahor