मेरे पास फ्लास्क एप्लिकेशन है जो PostgreSQL से जुड़ता है और एक ही इंस्टॉलेशन में अच्छा काम करता है। हालाँकि जब मैं इसे अलग-अलग कंटेनरों में डॉकटर का उपयोग करके कंटेनरीकृत करता हूं, तो फ्लास्क ऐप पोस्टग्रेएसक्यूएल से कनेक्ट करने में असमर्थ होता है और प्राप्त त्रुटि psycopg2.OperationalError: सर्वर से कनेक्ट नहीं हो सका: कनेक्शन से इनकार कर दिया

App.py के लिए कोड नीचे दिया गया है

app = Flask(__name__)

app.config['basedir'] = os.path.abspath(os.path.dirname(__file__))
app.config['DEVELOPMENT'] = True
app.config['DEBUG'] = True

POSTGRES = {
    'user': 'postgres',
    'pw': 'postgres',
    'db': 'postgres',
    'host': 'localhost',
    'port': '5432',
}
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://%(user)s:%(pw)s@%(host)s:%(port)s/%(db)s' % POSTGRES
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

api = Api(app)

from database.postgresql import db
db.init_app(app)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

ऐप को ऐप सर्वर uwsgi का उपयोग करके तैनात किया गया है और नीचे प्रदान किया गया है app.ini फ़ाइल सामग्री

[uwsgi]
module=wsgi:app
wsgi-file = app.py
callable = app
socket = :8080
processes = 4
threads = 2
master = true
chmod-socket = 660
vacuum = true
die-on-term = true

त्रुटि स्टैक इस प्रकार है

  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2336, in _wrap_pool_connect
    return fn()
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 364, in connect
    return _ConnectionFairy._checkout(self)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 778, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 495, in checkout
    rec = pool._do_get()
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/impl.py", line 140, in _do_get
    self._dec_overflow()
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 68, in __exit__
    compat.raise_(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
    raise exception
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/impl.py", line 137, in _do_get
    return self._create_connection()
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 309, in _create_connection
    return _ConnectionRecord(self)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 440, in __init__
    self.__connect(first_connect_check=True)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 661, in __connect
    pool.logger.debug("Error on connect(): %s", e)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 68, in __exit__
    compat.raise_(
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
    raise exception
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 656, in __connect
    connection = pool._invoke_creator(self)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 493, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/usr/local/lib/python3.9/site-packages/psycopg2/__init__.py", line 127, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
-1
Hemant Satam 20 अक्टूबर 2020, 22:31

1 उत्तर

सबसे बढ़िया उत्तर

App.py में आपके पोस्टग्रेज कॉन्फ़िगरेशन में कोई समस्या है।

आप अपने पोस्टग्रेज कंटेनर से कनेक्ट करने का प्रयास नहीं कर रहे हैं, बल्कि अपने फ्लास्क कंटेनर के लोकलहोस्ट से। आपको इसके बजाय पोस्टग्रेज कंटेनर का पता निर्दिष्ट करना होगा। तब यह पूरी तरह से काम करेगा।

डॉकर में नेटवर्क संचार कैसे काम करता है, इसके बारे में आप अधिक पढ़ सकते हैं यहां .

0
MB95 20 अक्टूबर 2020, 21:15