# Dockerfile for the LIBERO benchmark. # Build the container: # docker build . -t libero -f examples/libero/Dockerfile # Run the container: # docker run --rm -it --network=host -v .:/app -v /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY=$DISPLAY --gpus all libero /bin/bash FROM nvidia/cuda:12.2.2-cudnn8-runtime-ubuntu22.04@sha256:2d913b09e6be8387e1a10976933642c73c840c0b735f0bf3c28d97fc9bc422e0 COPY --from=ghcr.io/astral-sh/uv:0.5.1 /uv /uvx /bin/ RUN apt-get update && \ apt-get install -y \ make \ g++ \ clang \ libosmesa6-dev \ libgl1-mesa-glx \ libglew-dev \ libglfw3-dev \ libgles2-mesa-dev \ libglib2.0-0 \ libsm6 \ libxrender1 \ libxext6 WORKDIR /app # Copy from the cache instead of linking since it's a mounted volume ENV UV_LINK_MODE=copy # Write the virtual environment outside of the project directory so it doesn't # leak out of the container when we mount the application code. ENV UV_PROJECT_ENVIRONMENT=/.venv # Copy the requirements files so we can install dependencies. # The rest of the project is mounted as a volume, so we don't need to rebuild on changes. # This strategy is best for development-style usage. COPY ./examples/libero/requirements.txt /tmp/requirements.txt COPY ./third_party/libero/requirements.txt /tmp/requirements-libero.txt COPY ./packages/openpi-client/pyproject.toml /tmp/openpi-client/pyproject.toml # Install python dependencies. RUN uv venv --python 3.8 $UV_PROJECT_ENVIRONMENT RUN uv pip sync /tmp/requirements.txt /tmp/requirements-libero.txt /tmp/openpi-client/pyproject.toml --extra-index-url https://download.pytorch.org/whl/cu113 --index-strategy=unsafe-best-match ENV PYTHONPATH=/app:/app/packages/openpi-client/src:/app/third_party/libero # Create a default config file to avoid an input prompt from LIBERO's init script. # https://github.com/Lifelong-Robot-Learning/LIBERO/blob/master/libero/libero/__init__.py ENV LIBERO_CONFIG_PATH=/tmp/libero RUN mkdir -p /tmp/libero && cat <<'EOF' > /tmp/libero/config.yaml benchmark_root: /app/third_party/libero/libero/libero bddl_files: /app/third_party/libero/libero/libero/bddl_files init_states: /app/third_party/libero/libero/libero/init_files datasets: /app/third_party/libero/libero/datasets assets: /app/third_party/libero/libero/libero/assets EOF CMD ["/bin/bash", "-c", "source /.venv/bin/activate && python examples/libero/main.py $CLIENT_ARGS"]