В Docker контейнере не запускается Flask приложение

Хотел запустить в одном образе цельное приложение, взял образ убунту, установил на него все, что нужно, но при запуске возникает ошибка, хотя пароли совпадают.

В чем проблема?

Прикрепляю докерфайл, лог и подключение к БД.

Dockerfile:

FROM ubuntu:focal

MAINTAINER Ruslan

ENV TZ=Europe/Kiev
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get -yqq update
RUN apt-get -yqq install python3.8
RUN apt-get -yqq install python3-pip

RUN apt-get update && apt-get install -y software-properties-common postgresql-12 postgresql-client-12 postgresql-contrib-12
USER postgres

RUN    /etc/init.d/postgresql start &&\
    psql --command "CREATE USER flaskuser WITH SUPERUSER PASSWORD 'pass';" &&\
    createdb -O flaskuser flaskdb

RUN echo "listen_addresses = '*'" >> /etc/postgresql/12/main/postgresql.conf
RUN service postgresql restart

RUN echo "host all  all    0.0.0.0/0  md5" >> /etc/postgresql/12/main/pg_hba.conf

RUN echo "listen_addresses='*'" >> /etc/postgresql/12/main/postgresql.conf


ENV PROJECT_DIR /app

WORKDIR ${PROJECT_DIR}

COPY requirements.txt ${PROJECT_DIR}/

RUN pip install -r requirements.txt

COPY . ${PROJECT_DIR}

EXPOSE 5000

ENTRYPOINT ["python3"]

CMD ["wsgi.py"]

Logs:

    Traceback (most recent call last):
  File "wsgi.py", line 3, in <module>
    app = init_app()
  File "/app/flaskr/__init__.py", line 17, in init_app
    db.create_all()
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 1094, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 1086, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/sql/schema.py", line 4785, in create_all
    bind._run_ddl_visitor(
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3116, in _run_ddl_visitor
    with self.begin() as conn:
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3032, in begin
    conn = self.connect(close_with_result=close_with_result)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3204, in connect
    return self._connection_cls(self, close_with_result=close_with_result)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
    else engine.raw_connection()
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3283, in raw_connection
    return self._wrap_pool_connect(self.pool.connect, _connection)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3253, in _wrap_pool_connect
    Connection._handle_dbapi_exception_noconnection(
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2100, in _handle_dbapi_exception_noconnection
    util.raise_(
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3250, in _wrap_pool_connect
    return fn()
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 310, in connect
    return _ConnectionFairy._checkout(self)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 868, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 476, in checkout
    rec = pool._do_get()
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/impl.py", line 146, in _do_get
    self._dec_overflow()
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
    return self._create_connection()
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 256, in _create_connection
    return _ConnectionRecord(self)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 371, in __init__
    self.__connect()
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 666, in __connect
    pool.logger.debug("Error on connect(): %s", e)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 661, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/create.py", line 590, in connect
    return dialect.connect(*cargs, **cparams)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 597, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/var/lib/postgresql/.local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "0.0.0.0", port 5432 failed: FATAL:  password authentication failed for user "flaskuser"
connection to server at "0.0.0.0", port 5432 failed: FATAL:  password authentication failed for user "flaskuser"

Connection to DB:

SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://flaskuser:pass@localhost:5432/flaskdb'

Ответы (1 шт):

Автор решения: Aleksey Vaganov

Контейнеризация задумана для того чтобы каждый контейнер выполнял функцию одного сервиса в изолированно окружении. Почитайте Best prcatice Вам нужно поднять несколько контейнеров для вашего приложения.

→ Ссылка