'psycopg2.OperationalError: could not connect to server in docker
Trying to launch in docker or locally flask+postresql. Both have the same problem ** File "E:\tz\flask-quiz\app\app.py", line 12, in db.create_all() ** I don't understand why this is happening. Is this problem with postgres connection? Or should i use another command insted of create_all()? There are traceback
File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3280, in _wrap_pool_connect
flask-quiz-app-1 | return fn()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 310, in connect
flask-quiz-app-1 | return _ConnectionFairy._checkout(self)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 868, in _checkout
flask-quiz-app-1 | fairy = _ConnectionRecord.checkout(pool)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 476, in checkout
flask-quiz-app-1 | rec = pool._do_get()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 145, in _do_get
flask-quiz-app-1 | with util.safe_reraise():
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
flask-quiz-app-1 | compat.raise_(
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
flask-quiz-app-1 | raise exception
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
flask-quiz-app-1 | return self._create_connection()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 256, in _create_connection
flask-quiz-app-1 | return _ConnectionRecord(self)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 371, in __init__
flask-quiz-app-1 | self.__connect()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 665, in __connect
flask-quiz-app-1 | with util.safe_reraise():
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
flask-quiz-app-1 | compat.raise_(
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
flask-quiz-app-1 | raise exception
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 661, in __connect
flask-quiz-app-1 | self.dbapi_connection = connection = pool._invoke_creator(self)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 590, in connect
flask-quiz-app-1 | return dialect.connect(*cargs, **cparams)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 597, in connect
flask-quiz-app-1 | return self.dbapi.connect(*cargs, **cparams)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
flask-quiz-app-1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
flask-quiz-app-1 | psycopg2.OperationalError: could not connect to server: Connection refused
flask-quiz-app-1 | Is the server running on host "postgres" (172.20.0.2) and accepting
flask-quiz-app-1 | TCP/IP connections on port 5432?
flask-quiz-app-1 |
flask-quiz-app-1 |
flask-quiz-app-1 | The above exception was the direct cause of the following exception:
flask-quiz-app-1 |
flask-quiz-app-1 | Traceback (most recent call last):
flask-quiz-app-1 | File "/app/app.py", line 12, in <module>
flask-quiz-app-1 | db.create_all()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1094, in create_all
flask-quiz-app-1 | self._execute_for_all_tables(app, bind, 'create_all')
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 1086, in _execute_for_all_tables
flask-quiz-app-1 | op(bind=self.get_engine(app, bind), **extra)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/schema.py", line 4889, in create_all
flask-quiz-app-1 | bind._run_ddl_visitor(
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3146, in _run_ddl_visitor
flask-quiz-app-1 | with self.begin() as conn:
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3062, in begin
flask-quiz-app-1 | conn = self.connect(close_with_result=close_with_result)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3234, in connect
flask-quiz-app-1 | return self._connection_cls(self, close_with_result=close_with_result)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
flask-quiz-app-1 | else engine.raw_connection()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3313, in raw_connection
flask-quiz-app-1 | return self._wrap_pool_connect(self.pool.connect, _connection)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3283, in _wrap_pool_connect
flask-quiz-app-1 | Connection._handle_dbapi_exception_noconnection(
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2117, in _handle_dbapi_exception_noconnection
flask-quiz-app-1 | util.raise_(
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
flask-quiz-app-1 | raise exception
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3280, in _wrap_pool_connect
flask-quiz-app-1 | return fn()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 310, in connect
flask-quiz-app-1 | return _ConnectionFairy._checkout(self)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 868, in _checkout
flask-quiz-app-1 | fairy = _ConnectionRecord.checkout(pool)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 476, in checkout
flask-quiz-app-1 | rec = pool._do_get()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 145, in _do_get
flask-quiz-app-1 | with util.safe_reraise():
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
flask-quiz-app-1 | compat.raise_(
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
flask-quiz-app-1 | raise exception
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
flask-quiz-app-1 | return self._create_connection()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 256, in _create_connection
flask-quiz-app-1 | return _ConnectionRecord(self)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 371, in __init__
flask-quiz-app-1 | self.__connect()
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 665, in __connect
flask-quiz-app-1 | with util.safe_reraise():
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
flask-quiz-app-1 | compat.raise_(
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
flask-quiz-app-1 | raise exception
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 661, in __connect
flask-quiz-app-1 | self.dbapi_connection = connection = pool._invoke_creator(self)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 590, in connect
flask-quiz-app-1 | return dialect.connect(*cargs, **cparams)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 597, in connect
flask-quiz-app-1 | return self.dbapi.connect(*cargs, **cparams)
flask-quiz-app-1 | File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
flask-quiz-app-1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
flask-quiz-app-1 | sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
flask-quiz-app-1 | Is the server running on host "postgres" (172.20.0.2) and accepting
flask-quiz-app-1 | TCP/IP connections on port 5432?
flask-quiz-app-1 |
There are my non docker files: models.py:
from datetime import datetime
import flask_sqlalchemy
db = flask_sqlalchemy.SQLAlchemy()
class Quiz(db.Model):
__tablename__ = 'quiz'
id = db.Column(db.Integer, primary_key=True)
question = db.Column(db.String(255))
answer = db.Column(db.String(100))
created = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f"id: {self.id}, answer: {self.answer}, created: {self.created}"
config.py
user = "tzuser"
password = "password"
host = "postgres"
database = "tzdb"
port = "5432"
DATABASE_CONNECTION_URI = f'postgresql+psycopg2://{user}:{password}@{host}:{port}/{database}'
app.py
import json
from flask import Flask, request
from models import db
import config
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = config.DATABASE_CONNECTION_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.app_context().push()
db.init_app(app)
db.create_all()
# @app.route('/', methods=['GET'])
@app.route('/')
def hello_world():
return 'Flask Dockerized!'
There are my Dockerfile
FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]
and docker-compose.yml
version: '3.9'
services:
app:
build:
context: ./app
ports:
- 5000:5000
volumes:
- ./app:/app
postgres:
image: postgres:13.3
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "tzuser" ]
timeout: 45s
interval: 10s
retries: 10
restart: always
environment:
POSTGRES_DB: tzdb
POSTGRES_USER: tzuser
POSTGRES_PASSWORD: password
ports:
- 5432:5432
volumes:
# - ./db.sql:/docker-entrypoint-initdb.d/db.sql
# - ./postgres-data:/var/lib/postgresql/data
- ./db-data/:/var/lib/postgresql/data/
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
