【问题标题】:Connect to PostgreSQL from Flask app in another docker container从另一个 docker 容器中的 Flask 应用程序连接到 PostgreSQL
【发布时间】:2022-12-06 01:37:47
【问题描述】:

在虚拟机上,我有 2 个 docker 容器以名称 <postgres><system> 运行,它们在网络上以名称 <network> 运行。我无法更改这些容器中的选项。我创建了一个连接到数据库并输出所需信息的烧瓶应用程序。从我使用的本地计算机连接

conn = psycopg2.connect(
   database="db", user='user1', password='user1_passwd'
   host='<VM_ip>', port='<db_port>',
   sslmode='require',
   sslcert='./user1.crt',
   sslkey='./user1.key')

效果很好。
但是,当我在同一个虚拟机上运行我的应用程序并指定

conn = psycopg2.connect(
   database="db", user='user1', password='user1_passwd'
   host='<postgres>.<network>', port='<db_port>',
   sslmode='require',
   sslcert='./user1.crt',
   sslkey='./user1.key')

我得到一个错误:

psycopg2.OperationalError: could not parse network address \"<postgres>.<network>\": Name or service not known.

pg_hba 允许本地连接,问题是从 VM 中的新容器连接。 这是我的新容器的设置:

version: '3'

services:
  app:
    container_name: app
    restart: always
    build: ./app
    ports:
      - "5000:5000"
    command: gunicorn -w 1 -b 0.0.0.0:8000 wsgi:server

我尝试建立与本地计算机相同的连接,指定 VM_ip,但这也无济于事。 我还尝试在host=中指定&lt;postgres&gt;容器ip而不是其名称,但这也导致了错误。

你知道可能是什么问题吗?

【问题讨论】:

    标签: postgresql docker flask psycopg2


    【解决方案1】:

    您需要先创建一个网络,您将使用该网络在容器之间进行通信。您可以通过以下方式做到这一点:

    docker network create <example> #---> you can name it whatever you want
    

    然后,您需要将两个容器与您创建的网络连接起来。

    docker run -d --net example --name <postgres_container> <postgres_image>
    docker run -d --net example --name <flask_container> <flask_image>
    

    您可以在此处的文档中阅读有关 docker 网络的更多信息:

    https://docs.docker.com/network/

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 2016-07-14
      • 2019-02-24
      • 1970-01-01
      • 2021-02-03
      • 2015-09-13
      • 2019-09-04
      • 2020-01-30
      相关资源
      最近更新 更多