python - 烧瓶服务无法通过 docker-compose 与 postgres 通信
问题描述
收到一个错误,说它无法与我的 postgres 数据库建立连接
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
Is the server running on host "clean_life_database_1" (172.19.0.2) and accepting
TCP/IP connections on port 4444?
这是我的 docker-compose.yml
version: "3.8"
services:
web:
build: .
environment:
- POSTGRES_URI=postgresql://postgresuser123:mysecret@clean_life_database_1:4444
ports:
- 5000:5000
networks:
- db_new
database:
image: postgres
environment:
- POSTGRES_USER=postgresuser123
- POSTGRES_PASSWORD=mysecret
ports:
- 4444:5432
volumes:
- ./postgres-data:/var/lib/postgresql/data
networks:
- db_new
networks:
db_new:
driver: bridge
此外,项目所在的文件夹是 clean_life,所以当我检查容器名称时,它给了我 clean_life_database_1
为什么它以我的文件夹名称为前缀,而后缀为 1?
解决方案
查看 compose 中有关网络的文档,看起来您应该将数据库主机设置为database
(因为它是数据库容器的名称)。
您还设置了一个网络,该网络db_new
也可用于web
和database
服务相互通信,但我将把它留给您。
因此,作为更新的撰写文件,您应该具有:
version: "3.8"
services:
web:
build: .
environment:
- POSTGRES_URI=postgresql://postgresuser123:mysecret@database:4444
ports:
- 5000:5000
networks:
- db_new
database:
image: postgres
environment:
- POSTGRES_USER=postgresuser123
- POSTGRES_PASSWORD=mysecret
ports:
- 4444:5432
volumes:
- ./postgres-data:/var/lib/postgresql/data
networks:
- db_new
networks:
db_new:
driver: bridge
推荐阅读
- python - Tableau Server 客户端下载带有参数值的图像视图筛选器
- python - pyautogui 更改 MINIMUM_SLEEP 使 moveTo 函数不使用持续时间输入
- java - 配置 SAXParser 以在 WildFly 上处理带有 DOCTYPE 的 XML 文档
- node.js - 如何在 azure bot 节点 v4 中创建自适应卡并继续有关特定响应的对话
- javascript - 如何从 libarchive.js 获取解压缩文件和相应路径
- vb.net - 为什么 Azure 在运行 HelloWorld 时给我一个 500 错误?
- python - 使用 ChArUco 对两个摄像头进行 OpenCV 立体校准
- maps - Bing Maps 上的叠加图钉 - 如何显示两者的元数据或以一定的缩放比例将图钉分开
- reactjs - ReactNative 我无法传递到另一个页面
- mongodb - 关于 Express-session 中间件的一般疑问