# Dockerfile.user # This Dockerfile is designed for a lerobot user who wants to # experiment with the project. It starts from an Python Slim base image. # docker build -f docker/Dockerfile.user -t lerobot-user . # docker run -it --rm lerobot-user # Configure the base image ARG PYTHON_VERSION=3.10 FROM python:${PYTHON_VERSION}-slim # Configure environment variables ENV DEBIAN_FRONTEND=noninteractive \ MUJOCO_GL="egl" \ PATH="/lerobot/.venv/bin:$PATH" # Install system dependencies and uv (as root) RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential git curl \ libglib2.0-0 libgl1-mesa-glx libegl1-mesa ffmpeg \ libusb-1.0-0-dev \ speech-dispatcher libgeos-dev \ && curl -LsSf https://astral.sh/uv/install.sh | sh \ && mv /root/.local/bin/uv /usr/local/bin/uv \ && useradd --create-home --shell /bin/bash user_lerobot \ && apt-get clean && rm -rf /var/lib/apt/lists/* # Create application directory and set permissions WORKDIR /lerobot RUN chown -R user_lerobot:user_lerobot /lerobot # Switch to the non-root user USER user_lerobot # Create the virtual environment # We use a virtual environment inside the container—even though the container itself \ # provides isolation—to closely resemble local development and allow users to \ # run other Python projects in the same container without dependency conflicts. RUN uv venv # Install Python dependencies for caching COPY --chown=user_lerobot:user_lerobot pyproject.toml README.md ./ COPY --chown=user_lerobot:user_lerobot src/ src/ RUN uv pip install --no-cache ".[all]" # Copy the rest of the application code COPY --chown=user_lerobot:user_lerobot . . # Set the default command CMD ["/bin/bash"]