Python 应用程序如何使用 Docker-compose 找到 Postgres 数据库
How Python app can find a Postgres Database using Docker-compose
我在将 Docker Python 应用程序连接到 Docker Postgres 数据库时遇到问题。我解决了使用将两个容器放在同一网络中的解决方案,并在 Python app.
上的 DBHOST 中使用“Docker 名称”
docker network create <network_name>
现在我想把这 2 个Dockers 容器合为一个
docker-compose
但是现在我的应用程序找不到数据库。连接字符串是:
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
感谢您的帮助!
您必须在此处明确指定容器名称(对于 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
我在将 Docker Python 应用程序连接到 Docker Postgres 数据库时遇到问题。我解决了使用将两个容器放在同一网络中的解决方案,并在 Python app.
上的 DBHOST 中使用“Docker 名称”docker network create <network_name>
现在我想把这 2 个Dockers 容器合为一个
docker-compose
但是现在我的应用程序找不到数据库。连接字符串是:
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
感谢您的帮助!
您必须在此处明确指定容器名称(对于 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