# Package logic: # 1. base target: # - Install tools. # - Upgrade GCC if needed. # - Install C buildkit. # - Upgrade Python if needed. # - Install Python buildkit. # - Install Platform toolkit. # - Install S6-overlay. # 2. gpustack target. # - Install PostgreSQL. # - Install Higress standalone components. # - Install gpustack package from the mounted source code. # - Setup entrypoint to gpustack command. # Argument usage: # - PYTHON_VERSION: Version of Python to use. # - GPUSTACK_BASE_IMAGE: Base image for the gpustack stage. # - GPUSTACK_RUNTIME_ROCM_VERSION: Version of ROCm detection library for gpustack-runtime, update this if project dependencies has changed. # - GPUSTACK_RUNTIME_DOCKER_MIRRORED_NAME_FILTER_LABELS: Semicolon-separated list of labels to filter mirrored images when deploying mirrored deployment. # - HIGRESS_VERSION: Version of Higress to use. # - HIGRESS_APISERVER_VERSION: Version of Higress API server to use. ARG PYTHON_VERSION=3.12 ARG REGISTRY_MIRROR=docker.1panel.live ARG HIGRESS_REGISTRY=docker.1panel.live ARG GPUSTACK_BASE_IMAGE=base ARG ROCM_REGISTRY=docker.1panel.live ARG GPUSTACK_RUNTIME_ROCM_VERSION=7.0.2 ARG GPUSTACK_RUNTIME_DOCKER_MIRRORED_NAME_FILTER_LABELS ARG HIGRESS_VERSION=2.1.9 ARG HIGRESS_APISERVER_VERSION=0.0.26 ARG PROMETHEUS_VERSION=3.5.1 ARG GRAFANA_VERSION=12.2.4 # Stage Base # # Example build command: # docker build --tag=gpustack/gpustack:base --file=pack/Dockerfile --target=base --progress=plain . # FROM ${HIGRESS_REGISTRY}/gpustack/mirrored-higress-api-server:${HIGRESS_APISERVER_VERSION} AS apiserver FROM ${HIGRESS_REGISTRY}/gpustack/mirrored-higress-higress:${HIGRESS_VERSION} AS controller FROM ${HIGRESS_REGISTRY}/gpustack/mirrored-higress-pilot:${HIGRESS_VERSION} AS pilot FROM ${HIGRESS_REGISTRY}/gpustack/mirrored-higress-gateway:${HIGRESS_VERSION} AS gateway FROM ${REGISTRY_MIRROR}/library/ubuntu:24.04@sha256:d1e2e92c075e5ca139d51a140fff46f84315c0fdce203eab2807c7e495eff4f9 AS base SHELL ["/bin/bash", "-eo", "pipefail", "-c"] ARG TARGETPLATFORM ARG TARGETOS ARG TARGETARCH ## Install Tools ENV DEBIAN_FRONTEND=noninteractive \ LANG='en_US.UTF-8' \ LANGUAGE='en_US:en' \ LC_ALL='en_US.UTF-8' RUN < /etc/timezone \ && dpkg-reconfigure --frontend noninteractive tzdata # Cleanup rm -rf /var/tmp/* \ && rm -rf /tmp/* \ && rm -rf /var/cache/apt EOF ## Upgrade GCC if needed RUN <= 21.04" | bc -l) )); then echo "Skipping GCC upgrade for ${VERSION_ID}..." exit 0 fi # Install apt-get install -y --no-install-recommends \ gcc-11 g++-11 gfortran-11 gfortran # Update alternatives if [[ -f /etc/alternatives/gcov-dump ]]; then update-alternatives --remove-all gcov-dump; fi; update-alternatives --install /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-11 10 if [[ -f /etc/alternatives/lto-dump ]]; then update-alternatives --remove-all lto-dump; fi; update-alternatives --install /usr/bin/lto-dump lto-dump /usr/bin/lto-dump-11 10 if [[ -f /etc/alternatives/gcov ]]; then update-alternatives --remove-all gcov; fi; update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-11 10 if [[ -f /etc/alternatives/gcc ]]; then update-alternatives --remove-all gcc; fi; update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10 if [[ -f /etc/alternatives/gcc-nm ]]; then update-alternatives --remove-all gcc-nm; fi; update-alternatives --install /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-11 10 if [[ -f /etc/alternatives/cpp ]]; then update-alternatives --remove-all cpp; fi; update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-11 10 if [[ -f /etc/alternatives/g++ ]]; then update-alternatives --remove-all g++; fi; update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 10 if [[ -f /etc/alternatives/gcc-ar ]]; then update-alternatives --remove-all gcc-ar; fi; update-alternatives --install /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-11 10 if [[ -f /etc/alternatives/gcov-tool ]]; then update-alternatives --remove-all gcov-tool; fi; update-alternatives --install /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-11 10 if [[ -f /etc/alternatives/gcc-ranlib ]]; then update-alternatives --remove-all gcc-ranlib; fi; update-alternatives --install /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-11 10 if [[ -f /etc/alternatives/gfortran ]]; then update-alternatives --remove-all gfortran; fi; update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-11 10 # Cleanup rm -rf /var/tmp/* \ && rm -rf /tmp/* \ && rm -rf /var/cache/apt EOF ## Install C buildkit RUN </dev/null | grep libpython${PYTHON_VERSION})" ]]; then PYTHON_LIB_PREFIX=$(python3 -c "import sys; print(sys.base_prefix);") echo "${PYTHON_LIB_PREFIX}/lib" >> /etc/ld.so.conf.d/python3.conf echo "${PYTHON_LIB_PREFIX}/lib64" >> /etc/ld.so.conf.d/python3.conf ldconfig -v fi exit 0 fi # Add deadsnakes PPA via USTC mirror (bypass add-apt-repository which connects to launchpad) CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME") wget -q -O /tmp/deadsnakes.asc https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x6c7c47c706f57f28c70139e07965b5db433a593c gpg --dearmor /tmp/deadsnakes.asc mv /tmp/deadsnakes.asc.gpg /usr/share/keyrings/deadsnakes.gpg cat > /etc/apt/sources.list.d/deadsnakes-ubuntu-ppa-${CODENAME}.sources </tmp/requirements.txt build cmake<4 ninja<1.11 setuptools<80 setuptools-scm packaging<25 wheel pybind11<3 Cython psutil pipx uv yq hatchling py-spy poetry EOT python3 -m pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple --break-system-packages -r /tmp/requirements.txt # Cleanup rm -rf /var/tmp/* \ && rm -rf /tmp/* EOF ## Install s6-overlay ARG S6_OVERLAY_VERSION=3.2.1.0 RUN set -eux; \ case "${TARGETARCH}" in \ amd64) S6_ARCH="x86_64" ;; \ arm64) S6_ARCH="aarch64" ;; \ arm/v7) S6_ARCH="armhf" ;; \ arm/v6) S6_ARCH="arm" ;; \ *) \ echo >&2 "⚠️ Warning: Unknown TARGETARCH='${TARGETARCH}', defaulting to x86_64"; \ S6_ARCH="x86_64"; \ ;; \ esac; \ echo "Installing s6-overlay ${S6_OVERLAY_VERSION} for arch: ${S6_ARCH} (from TARGETARCH=${TARGETARCH})"; \ base_url="https://gh-proxy.com/https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}"; \ for pkg in noarch ${S6_ARCH}; do \ wget -q -O "/tmp/s6-overlay-${pkg}.tar.xz" "${base_url}/s6-overlay-${pkg}.tar.xz"; \ done \ && echo "📦 Extracting s6-overlay ..." \ && tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz \ && tar -C / -Jxpf /tmp/s6-overlay-${S6_ARCH}.tar.xz \ && rm -f /tmp/s6-overlay-*.tar.xz \ && echo "Installed s6-overlay ${S6_OVERLAY_VERSION} successfully." ENV S6_KEEP_ENV=1 \ S6_BEHAVIOUR_IF_STAGE2_FAILS=2 \ S6_SERVICES_GRACETIME=3000 \ S6_KILL_GRACETIME=3000 \ S6_VERBOSITY=1 \ S6_CMD_WAIT_FOR_SERVICES=1 # # Stage GPUStack # # Example build command: # docker build --tag=gpustack/gpustack:main --file=pack/Dockerfile --progress=plain . # # Vendor ROCm libraries from ROCm base image, # now only linux/amd64 is supported. # Must build on linux/amd64 platform. FROM --platform=${BUILDPLATFORM} ${ROCM_REGISTRY}/rocm/dev-ubuntu-22.04:${GPUSTACK_RUNTIME_ROCM_VERSION} AS rocm-base FROM ${GPUSTACK_BASE_IMAGE} AS gpustack SHELL ["/bin/bash", "-eo", "pipefail", "-c"] ARG TARGETPLATFORM ARG TARGETOS ARG TARGETARCH ## Configure data volume VOLUME /var/lib/gpustack ## Install PostgreSQL ENV PGCONFIG_FILE=/etc/postgresql/main/postgresql.conf \ POSTGRES_DB=gpustack RUN set -eux; \ groupadd -r postgres --gid=9999; \ useradd -r -g postgres --uid=9999 --home-dir=/var/lib/postgresql --shell=/bin/bash postgres; \ mkdir -p /var/lib/postgresql; \ chown -R postgres:postgres /var/lib/postgresql RUN < /etc/apt/sources.list.d/pgdg.list # Install apt-get update -y && apt-get install -y --no-install-recommends \ postgresql-17 \ gosu # Create symlinks for PostgreSQL 17 to simplify usage ln -s /usr/lib/postgresql/17/bin /usr/lib/postgresql/bin \ && ln -s /etc/postgresql/17/main /etc/postgresql/main \ && ln -s /var/lib/postgresql/17/main /var/lib/postgresql/main \ && ls -1 /usr/lib/postgresql/bin/ | xargs -I @ ln -sf /usr/lib/postgresql/bin/@ /usr/bin/@ gosu postgres echo "listen_addresses='*'" >> "$PGCONFIG_FILE" \ && gosu postgres echo "local all postgres peer" > /etc/postgresql/main/pg_hba.conf \ && gosu postgres echo "host all root 127.0.0.1/32 trust" >> /etc/postgresql/main/pg_hba.conf \ && gosu postgres echo "host all root ::1/128 trust" >> /etc/postgresql/main/pg_hba.conf \ && gosu postgres echo "host all all 0.0.0.0/0 scram-sha-256" >> /etc/postgresql/main/pg_hba.conf gosu postgres sed -i "s/^data_directory/#data_directory/" "$PGCONFIG_FILE" \ && gosu postgres sed -i "s/^hba_file/#hba_file/" "$PGCONFIG_FILE" \ && gosu postgres sed -i "s/^#log_destination/log_destination/" "$PGCONFIG_FILE" \ && gosu postgres sed -i "s/^#log_min_messages = warning/log_min_messages = info/" "$PGCONFIG_FILE" \ && gosu postgres sed -i "s/^#logging_collector = off/logging_collector = on/" "$PGCONFIG_FILE" \ && gosu postgres sed -i "s/^#log_filename/log_filename/" "$PGCONFIG_FILE" \ && gosu postgres sed -i "s/^#log_rotation_size/log_rotation_size/" "$PGCONFIG_FILE" # Cleanup rm -rf /var/tmp/* \ && rm -rf /tmp/* \ && rm -rf /var/cache/apt EOF ## Install Higress standalone components RUN --mount=type=bind,from=apiserver,source=/apiserver,dst=/mnt/apiserver,rw \ --mount=type=bind,from=controller,source=/usr/local/bin/higress,dst=/mnt/higress,rw \ --mount=type=bind,from=pilot,source=/usr/local/bin,dst=/mnt/pilot,rw \ --mount=type=bind,from=gateway,source=/,dst=/mnt/gateway,rw < /etc/containers/policy.json { "default": [ { "type": "insecureAcceptAnything" } ] } EOT # Review skopeo --version # Cleanup go go clean -cache -modcache -testcache \ && rm -rf /usr/local/go \ && rm -rf /root/.cache/go-build # Cleanup rm -rf /var/tmp/* \ && rm -rf /tmp/* \ && rm -rf /var/cache/apt EOF ## Install Prometheus and Grafana ARG PROMETHEUS_VERSION ARG GRAFANA_VERSION RUN --mount=type=bind,source=pack/third_party/prometheus-3.5.1.linux-amd64.tar.gz,target=/tmp/prometheus.tar.gz \ --mount=type=bind,source=pack/third_party/grafana-12.2.4.linux-amd64.tar.gz,target=/tmp/grafana.tar.gz <1){print $1}}' | uniq | paste -sd ',')" ... ## - Without container runtime installed: ## + Allowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged -v /usr/local/dcmi:/usr/local/dcmi:ro -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro -v /etc/hccn.conf:/etc/hccn.conf:ro -v /etc/ascend_install.info:/etc/ascend_install.info:ro ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --security-opt seccomp=unconfined -v /dev:/dev:ro -v /usr/local/dcmi:/usr/local/dcmi:ro -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro -v /etc/hccn.conf:/etc/hccn.conf:ro -v /etc/ascend_install.info:/etc/ascend_install.info:ro ... ENV ASCEND_HOME_PATH="/usr/local/Ascend/ascend-toolkit/latest" \ LD_LIBRARY_PATH="/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/ascend-toolkit/latest/runtime/lib64:${LD_LIBRARY_PATH}" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES="/usr/local/Ascend/ascend-toolkit;${GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES}" ## Active all Cambricon devices detection, ## works with (default) Cambricon container runtime and privileged mode. ## See https://github.com/Cambricon/cambricon-k8s-device-plugin/blob/master/device-plugin/pkg/cndev/include/cndev.h, ## https://github.com/Cambricon/cambricon-k8s-device-plugin/blob/master/device-plugin/pkg/cntopo/include/cntopo.h. ## Runs: ## - With container runtime installed: ## [TODO, TBD] ## - Without container runtime installed: ## + Allowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged -v /usr/local/neuware:/usr/local/neuware:ro -v /usr/bin/cnmon:/usr/bin/cnmon ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --security-opt seccomp=unconfined -v /dev:/dev:ro -v /usr/local/neuware:/usr/local/neuware:ro -v /usr/bin/cnmon:/usr/bin/cnmon ... ENV CAMBRICON_VISIBLE_DEVICES="all" \ NEUWARE_HOME="/usr/local/neuware" \ LD_LIBRARY_PATH="/usr/local/neuware/lib64:${LD_LIBRARY_PATH}" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES="/usr/local/neuware;${GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES}" ## Active all Hygon devices detection, ## works with (default) Hygon container runtime and privileged mode. ## See https://github.com/Project-HAMi/dcu-dcgm/blob/master/pkg/dcgm/include/rocm_smi.h. ## Runs: ## - With container runtime installed: ## [TODO, TBD] ## - Without container runtime installed: ## + Allowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged -v /opt/hyhal:/opt/hyhal:ro -v /opt/dtk:/opt/dtk:ro -e ROCM_SMI_LIB_PATH=/opt/hyhal/lib -e ROCM_PATH=/opt/dtk ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --security-opt seccomp=unconfined -v /dev:/dev:ro --group-add video -v /opt/hyhal:/opt/hyhal:ro -v /opt/dtk:/opt/dtk:ro -e ROCM_SMI_LIB_PATH=/opt/hyhal/lib -e ROCM_PATH=/opt/dtk ... ENV HYGON_VISIBLE_DEVICES="all" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES="/opt/dtk;${GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES}" ## Active all Iluvatar devices detection, ## works with (default) Iluvatar container runtime and privileged mode. ## See https://github.com/Deep-Spark/ix-container-toolkit. ## Runs: ## - With container runtime installed: ## + If installed Iluvatar container runtime as default runtime, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged -v /usr/local/corex:/usr/local/corex:ro ... ## + If there are mulitple container runtimes installed, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged --runtime iluvatar -v /usr/local/corex:/usr/local/corex:ro ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/corex:/usr/local/corex:ro ... ## - Without container runtime installed: ## + Allowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged -v /usr/local/corex:/usr/local/corex:ro ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --security-opt seccomp=unconfined -v /dev:/dev:ro -v /usr/local/corex:/usr/local/corex:ro ... ENV IX_VISIBLE_DEVICES="all" \ COREX_HOME="/usr/local/corex" \ LD_LIBRARY_PATH="/usr/local/corex/lib64:${LD_LIBRARY_PATH}" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES="/usr/local/corex;${GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES}" ## Active all MetaX devices detection, ## works with (default) MetaX container runtime and privileged mode. ## See https://developer.metax-tech.com/api/client/document/preview/626/k8s/03_component.html#container-runtime. ## Runs: ## - With container runtime installed: ## [TODO, TBD] ## - Without container runtime installed: ## + Allowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged -v /opt/mxdriver:/opt/mxdriver:ro -v /opt/maca:/opt/maca:ro ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --security-opt seccomp=unconfined -v /dev:/dev:ro -v /opt/mxdriver:/opt/mxdriver:ro -v /opt/maca:/opt/maca:ro ... ENV LD_LIBRARY_PATH="/opt/maca/lib:/opt/mxdriver/lib:${LD_LIBRARY_PATH}" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES="/opt/maca;${GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES}" ## Active all MThreads devices detection, ## works with (default) MThreads container runtime and privileged mode. ## See https://docs.mthreads.com/cloud-native/cloud-native-doc-online/install_guide. ## Runs: ## - With container runtime installed: ## + If installed MThreads container runtime as default runtime, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged ... ## + If there are mulitple container runtimes installed, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged --runtime mthreads ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock ... ## - Without container runtime installed: ## [TODO, TBD] ENV MTHREADS_VISIBLE_DEVICES="all" \ MTHREADS_DRIVER_CAPABILITIES="compute,utility" ## Active all NVIDIA devices detection, ## works with (default) NVIDIA container runtime and privileged mode. ## See https://docs.nvidia.com/deploy/nvml-api/nvml-api-reference.html#nvml-api-reference. ## Runs: ## - With container runtime installed: ## + If installed NVIDIA container runtime as default runtime, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged ... ## + If there are mulitple container runtimes installed, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --privileged --runtime nvidia ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock ... ## - Without container runtime installed: ## [TODO, TBD] ENV NVIDIA_DISABLE_REQUIRE="true" \ NVIDIA_VISIBLE_DEVICES="all" \ NVIDIA_DRIVER_CAPABILITIES="compute,utility" ## Active all T-Head devices detection, ## works with (default) T-Head container runtime and privileged mode. ## See https://help.aliyun.com/document_detail/2996754.html. ## Runs: ## - With container runtime installed: ## [TODO, TBD] ## - Without container runtime installed: ## + Allowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -e GPUSTACK_RUNTIME_DOCKER_RESOURCE_INJECTION_POLICY=CDI -v /var/run/cdi:/var/run/cdi --privileged -v /usr/local/PPU_SDK:/usr/local/PPU_SDK:ro ... ## + Disallowing privileged, try with: ## docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -e GPUSTACK_RUNTIME_DOCKER_RESOURCE_INJECTION_POLICY=CDI -v /var/run/cdi:/var/run/cdi --security-opt seccomp=unconfined -v /dev:/dev:ro -v /usr/local/PPU_SDK:/usr/local/PPU_SDK:ro ... ENV PPU_HOME="/usr/local/PPU_SDK" \ LD_LIBRARY_PATH="/usr/local/PPU_SDK/CUDA_SDK/lib64:/usr/local/PPU_SDK/lib:${LD_LIBRARY_PATH}" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES="/usr/local/PPU_SDK;${GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES}" ## Active GPUStack runtime mirrored deployment mode, ## if getting an error like, "Found multiple Containers with the same hostname ...", ## please use `--env GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=...` to specify the exact container name. ## ARG GPUSTACK_RUNTIME_DOCKER_MIRRORED_NAME_FILTER_LABELS ## GPUSTACK_RUNTIME_LOG_EXCEPTION=false: Disable logging exceptions from gpustack-runtime. ## GPUSTACK_RUNTIME_DEPLOY_CDI_SPECS_DIRECTORY=/var/run/cdi: Set CDI specs directory. ## GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true: Enable mirrored deployment mode. ## GPUSTACK_RUNTIME_DEPLOY_CORRECT_RUNNER_IMAGE=false: Disable auto correction of runner images. ## GPUSTACK_RUNTIME_DOCKER_IMAGE_NO_PULL_VISUALIZATION=true: Disable visualizating image pull progress, instead using simple logs. ## GPUSTACK_RUNTIME_DOCKER_MIRRORED_NAME_FILTER_LABELS: Configure filter labels for mirrored deployment. ## GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES: Declare volumes to be ignored during mirrored deployment. ENV GPUSTACK_RUNTIME_LOG_EXCEPTION="false" \ GPUSTACK_RUNTIME_DEPLOY_CDI_SPECS_DIRECTORY="/var/run/cdi" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT="true" \ GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES="/var/run/cdi;${GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT_IGNORE_VOLUMES}" \ GPUSTACK_RUNTIME_DEPLOY_CORRECT_RUNNER_IMAGE="false" \ GPUSTACK_RUNTIME_DOCKER_IMAGE_NO_PULL_VISUALIZATION="true" \ GPUSTACK_RUNTIME_DOCKER_MIRRORED_NAME_FILTER_LABELS="${GPUSTACK_RUNTIME_DOCKER_MIRRORED_NAME_FILTER_LABELS}" COPY --chmod=755 pack/entrypoint.sh /usr/bin/entrypoint.sh WORKDIR / ENTRYPOINT [ "/usr/bin/entrypoint.sh" ]