首页 > 解决方案 > 如何将 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 配置文件,但我确实在过去的某个时候让它工作,所以我想我有不需要任何。

标签: docker-compose

解决方案


使用链接连接到其他容器。

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 服务。希望这是完整的帮助。


推荐阅读