1
0
mirror of https://github.com/home-assistant/supervisor.git synced 2026-07-03 03:45:45 +01:00
Files
supervisor/Dockerfile
T
Stefan Agner d251d2b124 Increase s6 service stop timeout for graceful shutdown (#6892)
The s6 supervision tree only waited S6_SERVICES_GRACETIME (10s) for the
Supervisor service in /etc/services.d to stop before tearing down the rest
of the tree, which cut graceful shutdown short well before the container's
stop timeout. Now that the OS grants the Supervisor container more time to
shut down, raise S6_SERVICES_GRACETIME to 415s so a long-running graceful
shutdown can complete.

Also set S6_KILL_GRACETIME explicitly to its default of 3000ms. It only acts
as the final SIGTERM-to-SIGKILL grace at the very end of shutdown, so the
default is fine, but stating it keeps both shutdown timers documented in one
place.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:21:28 +02:00

78 lines
2.4 KiB
Docker

ARG BUILD_FROM=ghcr.io/home-assistant/base-python:3.14-alpine3.22-2026.05.0
FROM ${BUILD_FROM} AS supervisor-base
ENV \
S6_SERVICES_GRACETIME=415000 \
S6_KILL_GRACETIME=3000 \
SUPERVISOR_API=http://localhost \
CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1 \
UV_SYSTEM_PYTHON=true
# Install OS packages used both by build and final image
RUN \
set -x \
&& apk add --no-cache \
findutils \
eudev \
eudev-libs \
git \
libffi \
libpulse \
musl \
openssl \
yaml \
\
&& pip3 install uv==0.10.9
#############################################
# Install requirements and build Supervisor #
#############################################
FROM supervisor-base AS supervisor-build
WORKDIR /usr/src
# Install requirements
RUN \
--mount=type=bind,source=./requirements.txt,target=/usr/src/requirements.txt \
--mount=type=bind,source=./wheels,target=/usr/src/wheels \
if ls /usr/src/wheels/musllinux/* >/dev/null 2>&1; then \
LOCAL_WHEELS=/usr/src/wheels/musllinux; \
echo "Using local wheels from: $LOCAL_WHEELS"; \
else \
LOCAL_WHEELS=; \
echo "No local wheels found"; \
fi && \
uv pip install --compile-bytecode --no-cache --no-build \
-r requirements.txt \
${LOCAL_WHEELS:+--find-links $LOCAL_WHEELS}
# Install Home Assistant Supervisor
ARG BUILD_VERSION="9999.09.9.dev9999"
COPY . supervisor
RUN \
sed -i "s/^SUPERVISOR_VERSION =.*/SUPERVISOR_VERSION = \"${BUILD_VERSION}\"/g" /usr/src/supervisor/supervisor/const.py \
&& uv pip install --no-cache -e ./supervisor \
&& python3 -m compileall ./supervisor/supervisor
# Copy the rest of rootfs files
COPY rootfs /
#########################
# Final flattened image #
#########################
FROM supervisor-base
# Copy everything from the build stage as a single layer
COPY --from=supervisor-build / /
LABEL \
io.hass.type="supervisor" \
org.opencontainers.image.title="Home Assistant Supervisor" \
org.opencontainers.image.description="Container-based system for managing Home Assistant Core installation" \
org.opencontainers.image.authors="The Home Assistant Authors" \
org.opencontainers.image.url="https://www.home-assistant.io/" \
org.opencontainers.image.documentation="https://www.home-assistant.io/docs/" \
org.opencontainers.image.licenses="Apache License 2.0"