dpang commited on
Commit
ca8d912
Β·
verified Β·
1 Parent(s): 33d0466

Add Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +62 -0
Dockerfile ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # RANS β€” OpenEnv Spacecraft Navigation Environment
2
+ # HuggingFace Spaces Docker image
3
+ # arXiv:2310.07393
4
+
5
+ ARG BASE_IMAGE=ghcr.io/meta-pytorch/openenv-base:latest
6
+ FROM ${BASE_IMAGE} AS builder
7
+
8
+ WORKDIR /app
9
+
10
+ ARG BUILD_MODE=standalone
11
+
12
+ # Copy environment code
13
+ COPY . /app/env
14
+
15
+ WORKDIR /app/env
16
+
17
+ # Ensure uv is available
18
+ RUN if ! command -v uv >/dev/null 2>&1; then \
19
+ curl -LsSf https://astral.sh/uv/install.sh | sh && \
20
+ mv /root/.local/bin/uv /usr/local/bin/uv && \
21
+ mv /root/.local/bin/uvx /usr/local/bin/uvx; \
22
+ fi
23
+
24
+ RUN apt-get update && apt-get install -y --no-install-recommends \
25
+ git \
26
+ && rm -rf /var/lib/apt/lists/*
27
+
28
+ # Install dependencies (handles both uv.lock and lockfile-free setups)
29
+ RUN --mount=type=cache,target=/root/.cache/uv \
30
+ if [ -f uv.lock ]; then \
31
+ uv sync --frozen --no-install-project --no-editable; \
32
+ else \
33
+ uv sync --no-install-project --no-editable; \
34
+ fi
35
+
36
+ RUN --mount=type=cache,target=/root/.cache/uv \
37
+ if [ -f uv.lock ]; then \
38
+ uv sync --frozen --no-editable; \
39
+ else \
40
+ uv sync --no-editable; \
41
+ fi
42
+
43
+ # ── Runtime stage ─────────────────────────────────────────────────────────────
44
+ FROM ${BASE_IMAGE}
45
+
46
+ WORKDIR /app
47
+
48
+ COPY --from=builder /app/env/.venv /app/.venv
49
+ COPY --from=builder /app/env /app/env
50
+
51
+ ENV PATH="/app/.venv/bin:$PATH"
52
+ ENV PYTHONPATH="/app/env:$PYTHONPATH"
53
+
54
+ # Default task (override via HF Space secrets or docker run -e)
55
+ ENV RANS_TASK=GoToPosition
56
+ ENV RANS_MAX_STEPS=500
57
+ ENV ENABLE_WEB_INTERFACE=true
58
+
59
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
60
+ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1
61
+
62
+ CMD ["sh", "-c", "cd /app/env && uvicorn server.app:app --host 0.0.0.0 --port 8000"]