FROM python:3.11-slim LABEL maintainer="qihuaiflow" LABEL description="Code Execution Sandbox - isolated code runner for Python and JavaScript" # Switch to Aliyun mirrors for faster downloads in China RUN sed -i 's|http://deb.debian.org/debian|http://mirrors.aliyun.com/debian|g' /etc/apt/sources.list.d/debian.sources \ && sed -i 's|http://deb.debian.org/debian-security|http://mirrors.aliyun.com/debian-security|g' /etc/apt/sources.list.d/debian.sources # Install Node.js from Debian repos + essential tools RUN apt-get update \ && apt-get install -y --no-install-recommends \ nodejs \ npm \ curl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && ln -sf /usr/bin/nodejs /usr/bin/node 2>/dev/null || true # Install Python packages with Aliyun mirror RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com \ fastapi==0.104.1 \ uvicorn==0.24.0 \ pydantic==2.5.2 # Create non-root user for security RUN useradd -m -s /bin/bash executor \ && mkdir -p /workspace /app \ && chown -R executor:executor /workspace /app # Copy executor server COPY executor_server.py /app/executor_server.py RUN chown executor:executor /app/executor_server.py WORKDIR /app USER executor EXPOSE 8000 HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8000/health || exit 1 CMD ["uvicorn", "executor_server:app", "--host", "0.0.0.0", "--port", "8000", "--no-access-log"]