| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671 |
- # syntax=docker/dockerfile:1.7
- # =============================================================================
- # Versions
- # =============================================================================
- # Update these values whenever the NVIDIA GPU Operator driver changes.
- ARG NVIDIA_DRIVER_BRANCH=580
- ARG NVIDIA_DRIVER_VERSION=580.178.04
- ARG NVIDIA_DRIVER_PACKAGE_VERSION=580.178.04.0ubuntu0
- # Sunshine version currently used by the image.
- ARG SUNSHINE_REF=f0ea536
- ARG SUNSHINE_VERSION=v2026.914.233613
- # IMPORTANT:
- # This build-deps release contains FFmpeg 9 with dynamic NVENC API selection.
- # It can select SDK 11/12/13 at runtime depending on the installed NVIDIA
- # driver, which is required for our 580.x driver.
- ARG BUILD_DEPS_VERSION=v2026.910.121303
- # =============================================================================
- # Build Sunshine
- #
- # FFmpeg is NOT compiled here.
- #
- # Sunshine's CMake downloads the prebuilt FFmpeg archive published by the
- # selected build-deps release.
- # =============================================================================
- FROM docker.io/nvidia/cuda:12.9.2-devel-ubuntu24.04 AS sunshine-build
- ARG SUNSHINE_REF
- ARG SUNSHINE_VERSION
- ARG BUILD_DEPS_VERSION
- ENV DEBIAN_FRONTEND=noninteractive
- RUN apt-get update && \
- apt-get install -y --no-install-recommends \
- ca-certificates \
- git && \
- rm -rf /var/lib/apt/lists/*
- # =============================================================================
- # Sunshine sources
- # =============================================================================
- RUN git clone \
- --filter=blob:none \
- https://github.com/LizardByte/Sunshine.git \
- /src/sunshine && \
- cd /src/sunshine && \
- git checkout "${SUNSHINE_REF}" && \
- git submodule update --init --recursive --depth 1
- # =============================================================================
- # Override Sunshine's build-deps revision
- #
- # f0ea536 normally points to an older build-deps release.
- #
- # Force v2026.910.121303 so Sunshine's ffmpeg.cmake downloads:
- #
- # https://github.com/LizardByte/build-deps/releases/download/
- # v2026.910.121303/Linux-x86_64-ffmpeg.tar.gz
- #
- # That FFmpeg build includes dynamic NVENC API selection for SDK 11/12/13.
- # =============================================================================
- RUN set -eux; \
- git -C /src/sunshine/third-party/build-deps fetch \
- --depth 1 \
- --force \
- origin \
- "refs/tags/${BUILD_DEPS_VERSION}:refs/tags/${BUILD_DEPS_VERSION}"; \
- git -C /src/sunshine/third-party/build-deps checkout \
- --detach \
- "${BUILD_DEPS_VERSION}"; \
- ACTUAL_BUILD_DEPS_VERSION="$( \
- git -C /src/sunshine/third-party/build-deps \
- describe --tags --exact-match \
- )"; \
- echo "Selected build-deps: ${ACTUAL_BUILD_DEPS_VERSION}"; \
- test "${ACTUAL_BUILD_DEPS_VERSION}" = "${BUILD_DEPS_VERSION}"
- # =============================================================================
- # Sunshine f0ea536 -> FFmpeg 9 NVENC preset compatibility
- #
- # f0ea536 still converts:
- #
- # nvenc_preset=1 -> numeric preset 12
- #
- # FFmpeg 9 uses a different internal numeric range (P1..P7 = 3..9).
- #
- # Current Sunshine solves this by passing the symbolic FFmpeg preset ("p1",
- # "p2", ... "p7") instead of relying on FFmpeg's numeric enum.
- #
- # Apply the minimal equivalent backport here.
- #
- # The grep checks intentionally make the build fail if the source no longer
- # matches what we expect.
- # =============================================================================
- RUN set -eux; \
- grep -Fq \
- ' int preset;' \
- /src/sunshine/src/config.h; \
- grep -Fq \
- ' video.nv_legacy.preset = video.nv.quality_preset + 11;' \
- /src/sunshine/src/config.cpp; \
- sed -i \
- 's/ int preset;/ std::string preset;/' \
- /src/sunshine/src/config.h; \
- sed -i \
- 's/video\.nv_legacy\.preset = video\.nv\.quality_preset + 11;/video.nv_legacy.preset = std::format("p{}", video.nv.quality_preset);/' \
- /src/sunshine/src/config.cpp; \
- grep -Fq \
- ' std::string preset;' \
- /src/sunshine/src/config.h; \
- grep -Fq \
- ' video.nv_legacy.preset = std::format("p{}", video.nv.quality_preset);' \
- /src/sunshine/src/config.cpp; \
- ! grep -Fq \
- 'video.nv_legacy.preset = video.nv.quality_preset + 11;' \
- /src/sunshine/src/config.cpp; \
- echo "FFmpeg 9 NVENC preset compatibility patch: OK"
- # =============================================================================
- # Sunshine build dependencies
- #
- # The CUDA toolkit already exists in the nvidia/cuda base image.
- # --skip-cuda prevents linux_build.sh from downloading/installing another one.
- #
- # Do NOT disable CUDA during the CMake step below: we still use CUDA/NvFBC.
- # =============================================================================
- RUN cd /src/sunshine && \
- ./scripts/linux_build.sh \
- --sudo-off \
- --skip-cuda \
- --step=deps
- # =============================================================================
- # Configure Sunshine
- #
- # During this step Sunshine detects BUILD_DEPS_VERSION and downloads the
- # corresponding PREBUILT FFmpeg archive.
- # =============================================================================
- RUN cd /src/sunshine && \
- BRANCH=master \
- BUILD_VERSION="${SUNSHINE_VERSION}" \
- COMMIT="${SUNSHINE_REF}" \
- ./scripts/linux_build.sh \
- --sudo-off \
- --step=cmake
- # =============================================================================
- # Fail-fast validation
- #
- # Before spending time compiling Sunshine, make sure:
- #
- # 1. CMake really used the requested build-deps tag.
- # 2. The prebuilt FFmpeg archive exists.
- # 3. libavcodec contains the multi-SDK NVENC implementations introduced by
- # the dynamic NVENC API patch.
- #
- # Presence of 11.0 + 12.0 + 13.0 implementations is what we want for
- # compatibility with the NVIDIA 580 driver.
- # =============================================================================
- RUN set -eux; \
- ACTUAL_BUILD_DEPS_VERSION="$( \
- git -C /src/sunshine/third-party/build-deps \
- describe --tags --exact-match \
- )"; \
- test "${ACTUAL_BUILD_DEPS_VERSION}" = "${BUILD_DEPS_VERSION}"; \
- FFMPEG_LIB="/src/sunshine/build/_deps/ffmpeg/lib/libavcodec.a"; \
- test -s "${FFMPEG_LIB}"; \
- nm -g --defined-only "${FFMPEG_LIB}" \
- | grep -F 'ff_nvenc_encode_init_1100' >/dev/null; \
- nm -g --defined-only "${FFMPEG_LIB}" \
- | grep -F 'ff_nvenc_encode_init_1200' >/dev/null; \
- nm -g --defined-only "${FFMPEG_LIB}" \
- | grep -F 'ff_nvenc_encode_init_1300' >/dev/null; \
- echo "Prebuilt FFmpeg dynamic NVENC API support: OK"
- # =============================================================================
- # Build + package Sunshine
- # =============================================================================
- RUN cd /src/sunshine && \
- ./scripts/linux_build.sh \
- --sudo-off \
- --step=build && \
- ./scripts/linux_build.sh \
- --sudo-off \
- --step=package && \
- cp \
- /src/sunshine/build/cpack_artifacts/Sunshine.deb \
- /sunshine.deb
- # =============================================================================
- # Main image
- # =============================================================================
- FROM docker.io/library/ubuntu:24.04
- ARG NVIDIA_DRIVER_BRANCH
- ARG NVIDIA_DRIVER_VERSION
- ARG NVIDIA_DRIVER_PACKAGE_VERSION
- ARG USER_NAME=ubuntu
- ARG USER_UID=1000
- ARG USER_GID=1000
- ENV DEBIAN_FRONTEND=noninteractive \
- HOME=/home/ubuntu \
- USER=ubuntu \
- DISPLAY=:20 \
- DISPLAY_SIZEW=1920 \
- DISPLAY_SIZEH=1080 \
- DISPLAY_REFRESH=120 \
- DISPLAY_DPI=96 \
- DISPLAY_CDEPTH=24 \
- VIDEO_PORT=HDMI-0 \
- TZ=Europe/Paris \
- LANG=fr_FR.UTF-8 \
- LANGUAGE=fr_FR:fr \
- LC_ALL=fr_FR.UTF-8 \
- XDG_RUNTIME_DIR=/tmp/runtime-ubuntu \
- PIPEWIRE_RUNTIME_DIR=/tmp/runtime-ubuntu \
- PULSE_RUNTIME_PATH=/tmp/runtime-ubuntu/pulse \
- PULSE_SERVER=unix:/tmp/runtime-ubuntu/pulse/native \
- NVIDIA_VISIBLE_DEVICES=all \
- NVIDIA_DRIVER_CAPABILITIES=all \
- EXPECTED_NVIDIA_DRIVER_VERSION=${NVIDIA_DRIVER_VERSION} \
- NVIDIA_I386_PACKAGE_VERSION=${NVIDIA_DRIVER_PACKAGE_VERSION}
- SHELL ["/bin/bash", "-o", "pipefail", "-c"]
- USER root
- # =============================================================================
- # Base desktop / gaming environment
- # =============================================================================
- RUN dpkg --add-architecture i386 \
- && apt-get update \
- && apt-get install --no-install-recommends -y \
- btop \
- fonts-noto-cjk \
- fonts-ubuntu \
- mousepad \
- nano \
- ristretto \
- thunar \
- ubuntu-wallpapers \
- adwaita-icon-theme \
- elementary-xfce-icon-theme \
- greybird-gtk-theme \
- hicolor-icon-theme \
- humanity-icon-theme \
- keyboard-configuration \
- tango-icon-theme \
- xfce4-goodies \
- xfce4-notifyd \
- xfce4-pulseaudio-plugin \
- xfonts-base \
- xfonts-scalable \
- alsa-utils \
- ca-certificates \
- curl \
- dbus \
- dbus-user-session \
- dbus-x11 \
- file \
- fonts-dejavu \
- fonts-liberation \
- fonts-noto \
- fonts-noto-color-emoji \
- kmod \
- libasound2-plugins \
- libcap2-bin \
- libegl1 \
- libgbm1 \
- libgl1 \
- libglvnd0 \
- libglx0 \
- libpciaccess0 \
- libpulse0 \
- libvulkan1 \
- libx11-6 \
- libx11-xcb1 \
- libxdamage1 \
- libxext6 \
- libxfixes3 \
- libxinerama1 \
- libxrandr2 \
- libxss1 \
- libxtst6 \
- locales \
- mesa-utils \
- pciutils \
- pipewire \
- pipewire-pulse \
- procps \
- psmisc \
- pulseaudio-utils \
- sudo \
- supervisor \
- tzdata \
- udev \
- vulkan-tools \
- wireplumber \
- x11-utils \
- x11-xserver-utils \
- xauth \
- xcvt \
- xdg-user-dirs \
- xdg-utils \
- xfce4 \
- xfce4-terminal \
- xkb-data \
- xserver-xorg-core \
- xserver-xorg-input-libinput \
- xserver-xorg-legacy \
- xz-utils \
- neofetch \
- wmctrl \
- && sed -i \
- -e 's/^# *fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' \
- -e 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' \
- /etc/locale.gen \
- && locale-gen \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /var/cache/apt/* \
- /var/cache/debconf/* \
- /tmp/* \
- /var/tmp/*
- # =============================================================================
- # Desktop user
- # =============================================================================
- RUN set -eux; \
- if ! getent group "${USER_GID}" >/dev/null; then \
- groupadd --gid "${USER_GID}" "${USER_NAME}"; \
- fi; \
- if ! id -u "${USER_NAME}" >/dev/null 2>&1; then \
- useradd \
- --uid "${USER_UID}" \
- --gid "${USER_GID}" \
- --create-home \
- --shell /bin/bash \
- "${USER_NAME}"; \
- else \
- usermod --shell /bin/bash "${USER_NAME}"; \
- fi; \
- for group in \
- audio \
- games \
- input \
- render \
- tty \
- video; \
- do \
- getent group "${group}" >/dev/null \
- && usermod -aG "${group}" "${USER_NAME}" \
- || true; \
- done; \
- echo "${USER_NAME} ALL=(ALL:ALL) NOPASSWD: ALL" \
- > "/etc/sudoers.d/${USER_NAME}"; \
- chmod 0440 "/etc/sudoers.d/${USER_NAME}"; \
- install \
- -d \
- -o "${USER_UID}" \
- -g "${USER_GID}" \
- -m 0700 \
- /tmp/runtime-ubuntu; \
- install \
- -d \
- -o "${USER_UID}" \
- -g "${USER_GID}" \
- /home/${USER_NAME}/.config/sunshine \
- /games
- # =============================================================================
- # NVIDIA repository + nvidia-xconfig
- #
- # Only the userspace Xorg configuration utility is installed here.
- # The kernel driver remains fully managed by the NVIDIA GPU Operator.
- # =============================================================================
- RUN curl -fsSLO \
- https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb \
- && dpkg -i cuda-keyring_1.1-1_all.deb \
- && rm -f cuda-keyring_1.1-1_all.deb \
- && apt-get update \
- && apt-get install --no-install-recommends -y \
- "nvidia-xconfig=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
- && nvidia-xconfig --version \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /var/cache/apt/*
- # =============================================================================
- # NVIDIA Xorg driver modules
- #
- # Extract only the Xorg-side NVIDIA modules matching the host driver.
- # Do not install the whole amd64 NVIDIA userspace stack with APT.
- # =============================================================================
- RUN cd /tmp \
- && apt-get update \
- && apt-get download \
- "xserver-xorg-video-nvidia-${NVIDIA_DRIVER_BRANCH}=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
- && mkdir -p /tmp/nvidia-xorg \
- && dpkg-deb -x \
- "xserver-xorg-video-nvidia-${NVIDIA_DRIVER_BRANCH}_${NVIDIA_DRIVER_PACKAGE_VERSION}_amd64.deb" \
- /tmp/nvidia-xorg \
- && install -D -m 0755 \
- /tmp/nvidia-xorg/usr/lib/xorg/modules/drivers/nvidia_drv.so \
- /usr/lib/xorg/modules/drivers/nvidia_drv.so \
- && cp -a \
- /tmp/nvidia-xorg/usr/lib/xorg/modules/extensions/libglxserver_nvidia.so* \
- /usr/lib/xorg/modules/extensions/ \
- && rm -rf \
- /tmp/nvidia-xorg \
- /tmp/xserver-xorg-video-nvidia-*.deb \
- /var/lib/apt/lists/*
- # =============================================================================
- # NVIDIA GLVND / Vulkan configuration
- #
- # Actual 64-bit NVIDIA libraries are injected at runtime by the GPU Operator /
- # NVIDIA Container Toolkit.
- # =============================================================================
- RUN printf '%s\n' \
- '/usr/local/nvidia/lib' \
- '/usr/local/nvidia/lib64' \
- > /etc/ld.so.conf.d/nvidia.conf \
- && install -d -m 0755 \
- /etc/vulkan/icd.d \
- /usr/share/glvnd/egl_vendor.d \
- && cat > /etc/vulkan/icd.d/nvidia_icd.json <<'EOF'
- {
- "file_format_version": "1.0.0",
- "ICD": {
- "library_path": "libGLX_nvidia.so.0",
- "api_version": "1.3.0"
- }
- }
- EOF
- RUN cat > /usr/share/glvnd/egl_vendor.d/10_nvidia.json <<'EOF'
- {
- "file_format_version": "1.0.0",
- "ICD": {
- "library_path": "libEGL_nvidia.so.0"
- }
- }
- EOF
- # =============================================================================
- # Sunshine
- # =============================================================================
- COPY --from=sunshine-build /sunshine.deb /tmp/sunshine.deb
- RUN apt-get update \
- && apt-get install --no-install-recommends -y \
- /tmp/sunshine.deb \
- && setcap cap_sys_admin,cap_dac_override,cap_sys_nice=ep \
- "$(command -v sunshine)" \
- && rm -f /tmp/sunshine.deb \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /var/cache/apt/*
- # =============================================================================
- # Steam + 32-bit Linux gaming runtime
- # =============================================================================
- RUN dpkg --add-architecture i386 \
- && apt-get update \
- && apt-get install --no-install-recommends -y \
- ca-certificates \
- curl \
- && curl -fsSL \
- https://repo.steampowered.com/steam/archive/stable/steam.gpg \
- -o /usr/share/keyrings/steam.gpg \
- && printf '%s\n' \
- 'deb [arch=amd64,i386 signed-by=/usr/share/keyrings/steam.gpg] https://repo.steampowered.com/steam/ stable steam' \
- > /etc/apt/sources.list.d/steam-bootstrap.list \
- && apt-get update \
- && apt-get install --no-install-recommends -y \
- steam-launcher \
- steam-libs-amd64 \
- steam-libs-i386 \
- libegl1:amd64 \
- libegl1:i386 \
- libgbm1:amd64 \
- libgbm1:i386 \
- libgl1:amd64 \
- libgl1:i386 \
- libgl1-mesa-dri:amd64 \
- libgl1-mesa-dri:i386 \
- libglx-mesa0:amd64 \
- libglx-mesa0:i386 \
- libvulkan1:amd64 \
- libvulkan1:i386 \
- xdg-desktop-portal \
- xdg-desktop-portal-gtk \
- && rm -f /etc/apt/sources.list.d/steam-bootstrap.list \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /var/cache/apt/*
- # =============================================================================
- # Non-snap Firefox
- # =============================================================================
- RUN install -d -m 0755 /etc/apt/keyrings \
- && curl -fsSL \
- https://packages.mozilla.org/apt/repo-signing-key.gpg \
- -o /etc/apt/keyrings/packages.mozilla.org.asc \
- && echo \
- "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" \
- > /etc/apt/sources.list.d/mozilla.list \
- && printf '%s\n' \
- 'Package: *' \
- 'Pin: origin packages.mozilla.org' \
- 'Pin-Priority: 1000' \
- > /etc/apt/preferences.d/mozilla \
- && apt-get update \
- && apt-get install --no-install-recommends -y \
- firefox \
- firefox-l10n-fr \
- && apt-get clean
- # =============================================================================
- # NVIDIA 32-bit userspace
- #
- # The GPU Operator currently does not provide the compat32 libraries required
- # by 32-bit OpenGL applications and Proton/DXVK.
- #
- # Install the exact userspace version matching the host driver, then keep a
- # protected copy under /opt. The NVIDIA runtime can remove/mask the files in
- # /usr/lib/i386-linux-gnu when the pod starts; sunshine-entrypoint.sh restores
- # them afterwards.
- # =============================================================================
- RUN dpkg --add-architecture i386 \
- && apt-get update \
- && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- "libnvidia-common-${NVIDIA_DRIVER_BRANCH}=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
- "libnvidia-gpucomp-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
- "libnvidia-decode-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
- "libnvidia-compute-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
- "libnvidia-gl-${NVIDIA_DRIVER_BRANCH}:i386=${NVIDIA_DRIVER_PACKAGE_VERSION}" \
- && mkdir -p /opt/nvidia-i386 \
- && for file in $( \
- dpkg -L \
- "libnvidia-gl-${NVIDIA_DRIVER_BRANCH}:i386" \
- "libnvidia-compute-${NVIDIA_DRIVER_BRANCH}:i386" \
- "libnvidia-decode-${NVIDIA_DRIVER_BRANCH}:i386" \
- "libnvidia-gpucomp-${NVIDIA_DRIVER_BRANCH}:i386" \
- | grep '^/usr/lib/i386-linux-gnu/' \
- | sort -u \
- ); do \
- if [[ -e "${file}" || -L "${file}" ]]; then \
- cp -a --parents "${file}" /opt/nvidia-i386/; \
- fi; \
- done \
- && test -e \
- /opt/nvidia-i386/usr/lib/i386-linux-gnu/libGLX_nvidia.so.0 \
- && test -e \
- "/opt/nvidia-i386/usr/lib/i386-linux-gnu/libnvidia-glcore.so.${NVIDIA_DRIVER_VERSION}" \
- && ldconfig \
- && apt-get clean \
- && rm -rf \
- /var/lib/apt/lists/* \
- /var/cache/apt/*
- # Keep APT package indexes available for Steam's dependency checker.
- RUN apt-get update \
- && apt-get clean
- # =============================================================================
- # Runtime scripts
- # =============================================================================
- COPY desktop-entrypoint.sh /etc/desktop-entrypoint.sh
- COPY sunshine-entrypoint.sh /etc/sunshine-entrypoint.sh
- COPY supervisord.conf /etc/supervisord.conf
- COPY --chmod=0755 scripts/ /usr/local/bin/
- RUN sed -i 's/\r$//' \
- /etc/desktop-entrypoint.sh \
- /etc/sunshine-entrypoint.sh \
- /etc/supervisord.conf \
- && chmod 0755 \
- /etc/desktop-entrypoint.sh \
- /etc/sunshine-entrypoint.sh \
- && chmod 0644 \
- /etc/supervisord.conf
- # =============================================================================
- # Final filesystem permissions
- # =============================================================================
- RUN chown -R \
- "${USER_UID}:${USER_GID}" \
- "/home/${USER_NAME}" \
- /tmp/runtime-ubuntu
- # =============================================================================
- # Sanity checks
- # =============================================================================
- RUN command -v steam \
- && command -v nvidia-xconfig \
- && command -v supervisord \
- && command -v pipewire \
- && command -v wireplumber \
- && command -v Xorg \
- && command -v xfce4-session \
- && test -x /etc/sunshine-entrypoint.sh \
- && test -x /etc/desktop-entrypoint.sh
- # =============================================================================
- # Runtime
- # =============================================================================
- USER 1000:1000
- WORKDIR /home/ubuntu
- STOPSIGNAL SIGTERM
- ENTRYPOINT ["/etc/sunshine-entrypoint.sh"]
|