【问题标题】:How Python app can find a Postgres Database using Docker-composePython 应用程序如何使用 Docker-compose 找到 Postgres 数据库
【发布时间】:2021-11-20 11:31:30
【问题描述】:

我在将 Docker Python 应用程序连接到 Docker Postgres 数据库时遇到问题。我解决了使用将两个容器放在同一个网络中并在 Python 应用程序上的 DBHOST 中使用“Docker Names”的解决方案。

docker network create <network_name>

现在我想把这 2 个 Dockers 容器合二为一

码头工人撰写

但现在我的应用程序找不到数据库。连接字符串为:

from flask import Flask, request, render_template


app = Flask(__name__)


#import decimal
import psycopg2

DBHOST = "mypostgres"
#DB_HOST = "localhost"
DB_NAME = "correntista"
DB_USER = "postgres"
DB_PASS = "mysecretpassword"
DB_PORT = 5432

conn = psycopg2.connect(dbname = DB_NAME, user = DB_USER, password = DB_PASS, host = DBHOST, port = DB_PORT)

cur = conn.cursor()

运行 docker-compose 时容器的名称发生变化

       Name                     Command              State     Ports  
----------------------------------------------------------------------
banco_api_1          python ./app.py                 Exit 1           
banco_mypostgres_1   docker-entrypoint.sh postgres   Up       5432/tcp

但我尝试在 DBHOST 中使用“banco_mypostgres_1”,但没有任何反应。

这是我的 docker-compose.yml

version: "3"

#volumes:

networks:
    backend:

services:
    
    mypostgres:
            image: "mypostgres"
            networks:
                - backend
            environment:
                - bind-address=0.0.0.0
                - POSTGRES_PASSWORD=password 
                - POSTGRES_DB=db_name

    api:
            image: "my-docker_flask2"
            networks:
                - backend
            environment:
                - DBHOST=mypostgres 
            depends_on:
                - mypostgres

感谢您的帮助!

【问题讨论】:

  • 您可以为该特定容器执行docker logs banco_api_1 并向我们显示错误吗?
  • 尝试在mypostgres:中使用expose: -"5432"(你需要把它分成两行)
  • @saedx1 这里返回: Traceback File "/banco/./app.py",第 18 行,在 conn = psycopg2.connect(dbname = DB_NAME, user = DB_USER, password = DB_PASS,主机 = DBHOST,端口 = DB_PORT) 文件“/usr/local/lib/python3.9/site-packages/psycopg2/__init__.py”,第 122 行,在连接 conn = _connect(dsn, connection_factory=connection_factory, * *kwasync) psycopg2.OperationalError: could not connect to server: Connection refused 服务器是否在主机 "mypostgres" (172.26.0.2) 上运行并接受端口 5432 上的 TCP/IP 连接?

标签: python postgresql docker-compose connection


【解决方案1】:

您必须在此处明确指定容器名称(对于 postgres),以便其他容器连接到它。

在您创建的网络上,容器可以使用容器名称相互通信,在您的情况下,容器名称将是一些自动生成的容器名称。

为此,您的 postgres 容器名称和 DBHOST 名称必须相同。

您可以编辑您的 docker-compose 文件并为 postgres 添加容器名称,如下所示:

services:
    
    mypostgres:
            image: "mypostgres"
            container_name: mypostgres
            networks:
                - backend
            environment:
                - bind-address=0.0.0.0
                - POSTGRES_PASSWORD=password 
                - POSTGRES_DB=db_name

【讨论】:

  • 感谢您的回答!解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 2018-03-18
  • 2016-04-15
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多