docker-compose - 如何将 Flask 容器连接到 docker-compose 文件中的 Postgresql 容器?
问题描述
我变得非常沮丧。我正在尝试将烧瓶网站连接到 PostgreSQL 数据库。我将 postgresql db 做成了自己的容器,并尝试了所有我能想到的连接它的方法。为了简单起见,我的烧瓶文件具有这样的 uri 配置:
SQLALCHEMY_DATABASE_URI = 'postgresql://user:password@0.0.0.0:5432/db'
我没有尝试过localhost, 0.0.0.0, and 127.0.0.1
哪些工作,这是有道理的。由于 postgresql db 是另一个容器,因此它们无法在 localhost 上连接。他们需要连接。
我的文件的相关部分docker-compose.yml
是:
db:
image: postgres:10-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_DB=db
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
networks:
db_network:
aliases:
- "pdb"
webapp:
build: .
depends_on: [db]
environment:
- DEBUG=False
ports:
- "5000:5000"
networks:
- db_network
networks:
db_network:
driver: bridge
好的,没有错误。所以现在我尝试我的 URI asSQLALCHEMY_DATABASE_URI = 'postgresql://user:password@pwd:5432/db'
但我从 webabb 收到一个错误,它无法翻译主机名、名称或服务未知。在过去的几天里,我一直收到关于无法找到它的错误,或者它无法连接。
1)我确保删除 postgresql 的任何本地实例 2)我摆脱了我的卷,我不确定这是否会导致问题 3)我尝试了不同的端口 4)我在这里尝试了很多关于清除的建议孤立的容器和什么。
我确实使用了网络检查,但这确实提供了一个硬编码的 IP 地址,我猜它可以改变。我完全被难住了。任何人都可以提供一些指示吗?我很想完全擦除 Postgresql,然后设置网络以使其正常工作。然后我将添加回卷为了澄清,除了我在 docker-compose 文件中设置的内容之外,我没有任何类型的 postgres 配置文件,但我确实在过去的某个时候让它工作,所以我想我有不需要任何。
解决方案
使用链接连接到其他容器。
db:
image: postgres:10-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_DB=db
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
webapp:
build: .
depends_on: [db]
environment:
- DEBUG=False
ports:
- "5000:5000"
links:
- "db:my_db"
因此您可以使用my_db作为数据库的主机名来访问db 服务。希望这是完整的帮助。
推荐阅读
- localhost - Windows 10 上的 Rapidminer 服务器故障排除
- reactjs - 在 react-redux 应用程序中创建固定导航栏
- javascript - 如何在 stencil.js/tsx 中定义全局变量?
- tensorflow - 如何将字符串编码为固定长度的张量以供 TPU 使用?
- c# - 如何将 IdentityServer4 身份验证与授权分开
- coffeescript - 使用 coffeescript eslintrc 配置 eslint
- sql - 缺少右括号 00907. 00000 - “缺少右括号”
- sql - 如何通过某个列值找到列值差异最大的行对
- vb.net - 通过频繁更新将字典绑定到 DataGridView
- java - 如果 Datasource 扩展 DelegatingDataSource,Spring boot 不会回滚测试