File size: 1,704 Bytes
94bda86 43eeed9 94bda86 43eeed9 94bda86 43eeed9 94bda86 43eeed9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # Canonical OpenEnv runtime layer: a self-contained CPython (python-build-standalone) with the pinned
# OpenEnv release and its server dependencies at /opt/openenv. It contains no environment code.
# Any OpenEnv image, on any glibc Linux base, can take it with
# COPY --link --from=<this image>@sha256:... / /
# so every image that does carries the same layer bytes.
FROM python:3.12-slim-bookworm AS build
RUN apt-get update && apt-get install -y --no-install-recommends git ca-certificates && rm -rf /var/lib/apt/lists/* \
&& pip install --no-cache-dir uv==0.9.5
ENV UV_PYTHON_INSTALL_DIR=/opt/openenv/python UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_NO_CACHE=1
RUN uv python install 3.12 \
&& uv venv --seed --python 3.12 --python-preference only-managed /opt/openenv/venv \
&& uv pip install --python /opt/openenv/venv/bin/python \
"openenv @ git+https://github.com/meta-pytorch/OpenEnv.git@86a180ede21e044f7929b9a7783ad83aa67d83a3" \
&& /opt/openenv/venv/bin/python -c "import openenv, fastapi, uvicorn"
RUN mkdir -p /opt/openenv/www && echo "OpenEnv runtime layer for Arena (pinned OpenEnv 86a180ede21e)." > /opt/openenv/www/index.html
FROM busybox:1.36.1-musl AS busybox
# The image holds nothing but the runtime tree, so `COPY --link --from=<this image> / /` adds exactly
# these files with exactly these timestamps: the copied layer comes out the same in every build.
# A static busybox serves one page so the Space itself can run without a base OS.
FROM scratch
COPY --from=build /opt/openenv /opt/openenv
COPY --from=busybox /bin/busybox /opt/openenv/bin/busybox
EXPOSE 7860
CMD ["/opt/openenv/bin/busybox", "httpd", "-f", "-p", "7860", "-h", "/opt/openenv/www"]
|