ARG DENO_IMAGE=denoland/deno:alpine-1.34.2 ARG DENO_DIR=/deno_dir # Build stage FROM ${DENO_IMAGE} as builder WORKDIR /app # Set DENO_DIR to a known location ENV DENO_DIR=${DENO_DIR} # Cache dependencies COPY deno.jsonc deno.lock ./ COPY src/deps.ts ./src/ RUN deno cache ./src/deps.ts # Build application COPY . . RUN deno cache ./src/main.ts # Runtime stage FROM ${DENO_IMAGE} EXPOSE 1993 WORKDIR /app # Set DENO_DIR to the same location as in the build stage ENV DENO_DIR=${DENO_DIR} # Copy from build stage COPY --from=builder /app . COPY --from=builder ${DENO_DIR} ${DENO_DIR} # Change ownership to deno user RUN chown -R deno:deno /app ${DENO_DIR} USER deno CMD ["run", "--allow-net", "--allow-read", "--allow-env", "./src/main.ts"]