FROM python:3.12-slim AS builder RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \ sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list 2>/dev/null; \ true RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ libpq-dev \ default-libmysqlclient-dev \ unixodbc-dev \ && rm -rf /var/lib/apt/lists/* COPY backend-fastapi/requirements.txt . RUN pip install --no-cache-dir --user -r requirements.txt FROM python:3.12-slim RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \ sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list 2>/dev/null; \ true RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ gnupg \ ca-certificates \ && curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \ && curl -fsSL https://packages.microsoft.com/config/debian/12/prod.list -o /etc/apt/sources.list.d/mssql-release.list \ && apt-get update && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ libpq-dev \ default-libmysqlclient-dev \ unixodbc \ msodbcsql18 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libgdk-pixbuf-2.0-0 \ libffi-dev \ libcairo2 \ shared-mime-info \ fonts-noto-cjk \ fonts-wqy-zenhei \ fonts-wqy-microhei \ && rm -rf /var/lib/apt/lists/* \ && fc-cache -fv COPY --from=builder /root/.local /root/.local ENV PATH=/root/.local/bin:$PATH \ PYTHONPATH=/app COPY backend-fastapi/ . COPY docker/backend/entrypoint.sh /entrypoint.sh COPY docker/backend/wait-for-it.sh /wait-for-it.sh RUN chmod +x /entrypoint.sh /wait-for-it.sh RUN mkdir -p /app/env && echo "" > /app/env/prod.env EXPOSE 8000 ENTRYPOINT ["/entrypoint.sh"]