43 lines
1.5 KiB
Docker
43 lines
1.5 KiB
Docker
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"]
|