Teletube / Dockerfile
NitinBot002's picture
Update Dockerfile
255d73a verified
# Use the official Python 3.9 slim image as the base
FROM python:3.9-slim
# --- Permission Fix Section ---
# Create a non-root user and group with a specific UID/GID
# Using UID/GID 1000 is common, but ensure it aligns with your host if mounting volumes extensively.
RUN groupadd --gid 1000 appgroup && \
useradd --uid 1000 --gid 1000 --create-home --shell /bin/bash appuser
# Set environment variables for the new user's home directory
# This makes paths more robust and follows conventions
ENV HOME=/home/appuser
ENV APP_HOME=/home/appuser/app
# Ensure the app's virtual environment (if any future deps need it) or local bins are in PATH
ENV PATH=${HOME}/.local/bin:$PATH
# Create the application directory within the user's home
RUN mkdir -p ${APP_HOME}
# Set the working directory to the new app directory
WORKDIR ${APP_HOME}
# --- Dependency Installation ---
# Copy and install Python requirements
COPY ./requirements.txt ${APP_HOME}/requirements.txt
RUN pip install --no-cache-dir -r ${APP_HOME}/requirements.txt
# --- Application Code Copy ---
# Copy application code, ensuring ownership by the appuser
# Use --chown to set ownership during the copy step itself
COPY --chown=appuser:appgroup . ${APP_HOME}
# --- Final Ownership and User Switch ---
# Explicitly change ownership of the entire app directory again.
# This catches any files created during build steps or ensures consistency.
RUN chown -R appuser:appgroup ${APP_HOME}
# Switch to the non-root user for running the application
# This is the crucial step to ensure the process has the right permissions
USER appuser
# --- Expose and Run ---
# Expose the port the app runs on
EXPOSE 7860
# Define the command to run the application using Gunicorn
# Ensure it binds to 0.0.0.0 to be accessible outside the container
CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--timeout", "120", "app:app"]