Имею такой Dockerfile:
# Используем базовый образ с Python 3.11-slim-bookworm
FROM python:3.11-slim-bookworm
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \
POETRY_NO_INTERACTION=1 \
POETRY_VIRTUALENVS_CREATE=false
ENV PATH="${PATH}:/root/.local/bin"
EXPOSE 8000
EXPOSE 5433
RUN apt-get -y update && \
apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
postgresql-client \
libssl-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& pip install --no-cache-dir poetry
WORKDIR /app
COPY pyproject.toml poetry.lock ./
COPY . .
RUN poetry update # Обновление зависимостей
RUN poetry install --no-root # Установка зависимостей
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
и такой Docker-compose:
version: "3.0"
services:
db:
container_name: "db"
image: postgres:14.1-alpine
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
ports:
- "5433:5432"
networks:
- custom
db_test:
container_name: "db_test"
image: postgres:14.1-alpine
restart: always
environment:
- POSTGRES_USER=postgres_test
- POSTGRES_PASSWORD=postgres_test
- POSTGRES_DB=postgres_test
ports:
- "5434:5432"
networks:
- custom
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- .:/app
networks:
- custom
depends_on:
- db
- db_test
healthcheck:
test: [ "CMD-SHELL", "pg_isready -h db -p 5432 -U postgres" ]
interval: 5s
timeout: 10s
retries: 5
command: alembic -c alembic.ini upgrade heads
networks:
custom:
driver: bridge
приложение на FastAPI(ORM SQLAchemy), хочу накатить миграции, они не накатываются, т.к. возникает ошибка портов, почему для меня не понятно т.к. объединил сервисы в одну сеть и распараллелил порты для бд
вот урл в sqlalchemy
sqlalchemy.url =
postgresql://postgres:postgres@db:5433/postgres
вот микро-лог ошибки:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "db" (172.24.0.3), port 5433 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
где я допустил ошибку? возможно есть более удобное решение для накатки миграций чем у меня?