OSError: несколько исключений при подключении к базе данных с помощью docker-composePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 OSError: несколько исключений при подключении к базе данных с помощью docker-compose

Сообщение Anonymous »

Я пишу свой API бронирования с помощью FastAPI. У меня есть файл докера:

Код: Выделить всё

FROM python:3.11

RUN mkdir /booking

WORKDIR /booking

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY .  .

CMD [ "gunicorn", "app.main:app", "--workers", "4", "--worker-class", "uvicorn.workers.UvicornWorker", "--bind=0.0.0.0:8000" ]
И docker-compose.yml:

Код: Выделить всё

services:
db:
image: postgres:16
container_name: booking_db
env_file:
- .env-non-dev
ports:
- 5432:5432
redis:
image: redis:7
container_name: redis

booking:
image: booking_image
build:
context: .
container_name: booking_app
env_file:
- .env-non-dev
depends_on:
- db
- redis
command: sh -c "alembic upgrade head &&  gunicorn app.main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind=0.0.0.0:8000"
ports:
- 8000:8000

celery:
build:
context: .
container_name: booking_celery
command: sh -c "celery --app=app.tasks.celery_app:celery worker -l INFO"
env_file:
- .env-non-dev
depends_on:
- redis

flower:
build:
context: .
container_name: booking_flower
command: sh -c "celery --app=app.tasks.celery_app:celery flower"
env_file:
- .env-non-dev
depends_on:
- redis
Когда я делаю Docker Compose, моя база данных подключается: booking_db | 2024-10-10 21:30:22.665 UTC [1] ЖУРНАЛ: система базы данных готова принимать соединения
но когда мое приложение пытается выполнить обновление перегонного куба
но когда мое приложение пытается выполнить обновление перегонного куба
code> возникает исключение:

Код: Выделить всё

2024-10-12 19:03:22 Traceback (most recent call last):
2024-10-12 19:03:22   File "/usr/local/bin/alembic", line 8, in 
2024-10-12 19:03:22     sys.exit(main())
2024-10-12 19:03:22              ^^^^^^
2024-10-12 19:03:22   File "/usr/local/lib/python3.11/site-packages/alembic/config.py", line 636, in main
2024-10-12 19:03:22     CommandLine(prog=prog).main(argv=argv)
2024-10-12 19:03:22   File "/usr/local/lib/python3.11/site-packages/alembic/config.py", line 626, in main
2024-10-12 19:03:22     self.run_cmd(cfg, options)
2024-10-12 19:03:22   File "/usr/local/lib/python3.11/site-packages/alembic/config.py", line 603, in run_cmd
2024-10-12 19:03:22     fn(
2024-10-12 19:03:22   File "/usr/local/lib/python3.11/site-packages/alembic/command.py", line 406, in upgrade
2024-10-12 19:03:22     script.run_env()
2024-10-12 19:03:22   File "/usr/local/lib/python3.11/site-packages/alembic/script/base.py", line 582, in run_env
2024-10-12 19:03:22     util.load_python_file(self.dir, "env.py")
2024-10-12 19:03:22   File "/usr/local/lib/python3.11/site-packages/alembic/util/pyfiles.py", line 95, in load_python_file
2024-10-12 19:03:22     module = load_module_py(module_id, path)
2024-10-12 19:03:22              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.................
booking_app     |   File "/usr/local/lib/python3.11/site-packages/asyncpg/connection.py", line 2329, in connect
booking_app     |     return await connect_utils._connect(
booking_app     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
booking_app     |   File "/usr/local/lib/python3.11/site-packages/asyncpg/connect_utils.py", line 1017, in _connect
booking_app     |     raise last_error or exceptions.TargetServerAttributeNotMatched(
booking_app     |   File "/usr/local/lib/python3.11/site-packages/asyncpg/connect_utils.py", line 991, in _connect
booking_app     |     conn = await _connect_addr(
booking_app     |            ^^^^^^^^^^^^^^^^^^^^
booking_app     |   File "/usr/local/lib/python3.11/site-packages/asyncpg/connect_utils.py", line 828, in _connect_addr
booking_app     |     return await __connect_addr(params, True, *args)
booking_app     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
booking_app     |   File "/usr/local/lib/python3.11/site-packages/asyncpg/connect_utils.py", line 873, in __connect_addr
booking_app     |     tr, pr = await connector
booking_app     |              ^^^^^^^^^^^^^^^
booking_app     |   File "/usr/local/lib/python3.11/site-packages/asyncpg/connect_utils.py", line 744, in _create_ssl_connection
booking_app     |     tr, pr = await loop.create_connection(
booking_app     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
booking_app     |   File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1094, in create_connection
booking_app     |     raise OSError('Multiple exceptions: {}'.format(
booking_app     | OSError: Multiple exceptions: [Errno 111] Connect call failed ('::1', 5432, 0, 0), [Errno 111] Connect call failed ('127.0.0.1', 5432)
Я думаю, что мое приложение не может запуститься из-за головки обновления перегонного куба, потому что оно начинается с

Код: Выделить всё

command: sh -c "gunicorn app.main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind=0.0.0.0:8000"
но когда я пытаюсь работать с какой-то конечной точкой, возникает исключение
P.S. я добавил POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD в файл .env-non-dev
Моя информация о базе данных .env-non-dev:

Код: Выделить всё

DB_HOST=db
DB_PORT=5432
DB_USER=postgres
DB_PASS=postgres
DB_NAME=booking_app
DB_DRIVER="postgresql+asyncpg"
DATABASE_URL=${DB_DRIVER}://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}

POSTGRES_DB=booking_app
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
Я попытался запустить приложение без головки обновления перегонного куба, и это сработало. Пытался сделать с помощью bash-скриптов, но мое приложение их тоже не увидело.

Подробнее здесь: https://stackoverflow.com/questions/790 ... er-compose
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»