2017-03-02 6 views
0

하나의 posgresql 컨테이너와 다른 하나의 파이썬 컨테이너 응용 프로그램을 연결하려고합니다. 둘 다 제대로 연결되어 있으면 Python 응용 프로그램의 모든 연결 변수는 연결을 통해 노출되는 postgres 컨테이너의 연결 변수에서 직접 가져오고 postgresql 컨테이너를 검사 할 때 발견 된 것과 동일합니다. 나는 연결 문자열의 예에서 정확한 매개 변수와 함께 psql 프로그램을 사용하는 경우 :(psycopg2.OperationalError) 서버에 연결할 수 없습니다. 연결이 거부되었습니다. 서버가

포스트그레스 컨테이너에 데이터베이스에
psql -p 5432 -h 172.17.0.2 -d mydb -U user 

연결이 성공, 그래서 포스트 그레스는, 때 등 그러나 지정된 포트에서 올바르게 통신하고 있는지 알고 나는이 오류 얻을 동일한 연결 변수 플라스크를 통해 데이터베이스에 연결을 시도 :

import os, logging, json 
from datetime import datetime 
from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
from sqlalchemy import BigInteger, Integer, String, DateTime, Column, Table, ForeignKey, create_engine 
from sqlalchemy.dialects.postgresql import JSON 
from sqlalchemy.orm import scoped_session, sessionmaker, relationship 
from sqlalchemy.ext.declarative import declarative_base 

user = os.environ.get('DB_USER','user') 
password = os.environ.get('DB_PASSWORD','password') 
address = os.environ.get('DB_ADDR','0.0.0.0') 
port = os.environ.get('DB_PORT','') 
name = os.environ.get('DB_NAME','') 

db_url = "postgresql://%s:%[email protected]%s:%s/%s" % (user, password, address, port, name) 

engine = create_engine(db_url, convert_unicode=True, client_encoding='utf8') 

print (engine) 

engine.connect() 
: 아래

Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1122, in _do_get return self._pool.get(wait, self._timeout) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/queue.py", line 145, in get raise Empty sqlalchemy.util.queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2138, in _wrap_pool_connect return fn() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 516, in checkout rec = pool._do_get() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1138, in _do_get self._dec_overflow() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 60, in exit compat.reraise(exc_type, exc_value, exc_tb) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 187, in reraise raise value File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1135, in _do_get return self._create_connection() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 461, in init self.connect(first_connect_check=True) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 651, in __connect connection = pool._invoke_creator(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 105, in connect return dialect.connect(*cargs, **cparams) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 393, in connect return self.dbapi.connect(*cargs, **cparams) File "/usr/local/lib/python3.6/site-packages/psycopg2/__init.py", line 164, in connect conn = _connect(dsn, connection_factory=connection_factory, async=async) psycopg2.OperationalError: could not connect to server: Connection refused Is the server running on host "172.17.0.2" and accepting TCP/IP connections on port 5432?

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "./wsgi.py", line 14, in app = getModule("/var/www", name).app File "./wsgi.py", line 5, in getModule return imp.load_source(module, ("%s/%s.py" % (path, name))) File "/usr/local/lib/python3.6/imp.py", line 172, in load_source module = _load(spec) File "/var/www/backend.py", line 3, in import json, logging, db, os File "/var/www/db.py", line 36, in engine.connect() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2082, in connect return self._connection_cls(self, **kwargs) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 90, in init if connection is not None else engine.raw_connection() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2168, in raw_connection self.pool.unique_connection, _connection) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2142, in _wrap_pool_connect e, dialect, self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1456, in _handle_dbapi_exception_noconnection exc_info File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 186, in reraise raise value.with_traceback(tb) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2138, in _wrap_pool_connect return fn() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 516, in checkout rec = pool._do_get() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1138, in _do_get self._dec_overflow() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 60, in exit compat.reraise(exc_type, exc_value, exc_tb) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 187, in reraise raise value File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 1135, in _do_get return self._create_connection() File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 461, in init self.connect(first_connect_check=True) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py", line 651, in __connect connection = pool._invoke_creator(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 105, in connect return dialect.connect(*cargs, **cparams) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 393, in connect return self.dbapi.connect(*cargs, **cparams) File "/usr/local/lib/python3.6/site-packages/psycopg2/__init.py", line 164, in connect conn = _connect(dsn, connection_factory=connection_factory, async=async) sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused Is the server running on host "172.17.0.2" and accepting TCP/IP connections on port 5432?

하면 예외에 이르기까지의 내 플라스크 응용 프로그램의 코드입니다 다시는 내 호스트 컴퓨터에서 데이터베이스와의 성공적인 데이터베이스 연결에 사용되는 매개 변수와 일치

Engine(postgresql://user:***@172.17.0.2:5432/mydb) 

: 나는 "엔진"로그인 할 때

나는이 얻을.

docker 컨테이너가 제대로 작동하려면 모든 계정에 표시되므로 파이썬 코드에 문제가 있다고 가정합니다.

도움을 주시면 감사하겠습니다. 감사합니다.

답변

2

그래서 내 코드는 실제로 괜찮 았어. 파이썬이 데이터베이스가 완전히 초기화되고 연결을 수락하기 전에 연결 요청을 보내는 경쟁 조건이 발생했다.