OpenHands / Dockerfile
Backup-bdg's picture
Create Dockerfile
a49e5c3 verified
raw
history blame
2.58 kB
# Stage 1: Build the frontend (Node.js)
FROM node:21.7.2-bookworm-slim AS frontend-builder
WORKDIR /app
# Copy frontend package files and install dependencies
COPY ./frontend/package.json ./frontend/package-lock.json ./
RUN npm install -g [email protected] && npm ci
# Copy frontend source code and build
COPY ./frontend ./
RUN npm run build
# Stage 2: Build the backend dependencies (Python)
FROM python:3.12.3-slim AS backend-builder
WORKDIR /app
ENV PYTHONPATH='/app'
# Set Poetry environment variables for dependency management
ENV POETRY_NO_INTERACTION=1 \
POETRY_VIRTUALENVS_IN_PROJECT=1 \
POETRY_VIRTUALENVS_CREATE=1 \
POETRY_CACHE_DIR=/tmp/poetry_cache
# Install system dependencies and Poetry
RUN apt-get update -y && \
apt-get install -y curl make git build-essential && \
python3 -m pip install poetry==1.8.2 --break-system-packages
# Copy Poetry files and install dependencies
COPY ./pyproject.toml ./poetry.lock ./
RUN touch README.md
RUN poetry install --without evaluation,llama-index --no-root && rm -rf $POETRY_CACHE_DIR
# Stage 3: Final runtime image
FROM python:3.12.3-slim AS openhands-app
WORKDIR /app
# Define build argument and environment variables
ARG OPENHANDS_BUILD_VERSION=dev
ENV RUN_AS_OPENHANDS=true \
OPENHANDS_USER_ID=42420 \
SANDBOX_LOCAL_RUNTIME_URL=http://host.docker.internal \
USE_HOST_NETWORK=false \
WORKSPACE_BASE=/opt/workspace_base \
OPENHANDS_BUILD_VERSION=$OPENHANDS_BUILD_VERSION \
SANDBOX_USER_ID=0 \
FILE_STORE=local \
FILE_STORE_PATH=/.openhands-state
# Create necessary directories
RUN mkdir -p $FILE_STORE_PATH $WORKSPACE_BASE
# Install runtime dependencies
RUN apt-get update -y && \
apt-get install -y curl ssh sudo && \
apt-get clean
# Adjust UID range in login.defs to avoid conflicts
RUN sed -i 's/^UID_MIN.*/UID_MIN 499/' /etc/login.defs && \
sed -i 's/^UID_MAX.*/UID_MAX 1000000/' /etc/login.defs
# Create user and group for OpenHands
RUN groupadd app && \
useradd -l -m -u $OPENHANDS_USER_ID -s /bin/bash openhands && \
usermod -aG app openhands && \
usermod -aG sudo openhands && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# Copy backend dependencies from backend-builder
COPY --from=backend-builder /app/.venv ./.venv
# Copy frontend build artifacts from frontend-builder
COPY --from=frontend-builder /app/dist ./frontend/dist
# Copy the rest of the application code
COPY . .
# Expose port for the application
EXPOSE 3000
# Command to run the application
CMD ["./.venv/bin/python", "-m", "openhands.server.listen"]