【发布时间】: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