38 lines
968 B
Docker
38 lines
968 B
Docker
FROM python:3.11-slim
|
||
|
||
ENV PYTHONUNBUFFERED=1
|
||
|
||
# 1) Install build deps, netcat, curl—and gosu for privilege dropping
|
||
RUN apt-get update \
|
||
&& apt-get install -y \
|
||
gcc \
|
||
default-libmysqlclient-dev \
|
||
pkg-config \
|
||
netcat-openbsd \
|
||
curl \
|
||
gosu \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
WORKDIR /app
|
||
|
||
# 2) Copy & install Python requirements
|
||
COPY requirements.txt .
|
||
RUN pip install --upgrade pip \
|
||
&& pip install -r requirements.txt
|
||
|
||
# 3) Copy the rest of the app
|
||
COPY . .
|
||
|
||
# 4) Create the non-root user and make sure the upload dir exists and is chown’d
|
||
RUN groupadd -g 1000 appuser \
|
||
&& useradd -u 1000 -ms /bin/bash -g appuser appuser \
|
||
&& mkdir -p /app/data/uploads \
|
||
&& chown -R appuser:appuser /app/data/uploads
|
||
|
||
# 5) Install the entrypoint (keep this as root so it can chown the volume at runtime)
|
||
COPY entrypoint.sh /entrypoint.sh
|
||
RUN chmod +x /entrypoint.sh
|
||
|
||
ENTRYPOINT ["/entrypoint.sh"]
|
||
CMD ["flask", "run", "--host=0.0.0.0"]
|