首页 > 解决方案 > 烧瓶服务无法通过 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?

标签: pythonpostgresqldockerflaskdocker-compose

解决方案


查看 compose 中有关网络的文档,看起来您应该将数据库主机设置为database(因为它是数据库容器的名称)。

您还设置了一个网络,该网络db_new也可用于webdatabase服务相互通信,但我将把它留给您。

因此,作为更新的撰写文件,您应该具有:

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

推荐阅读