docker: review fixes from the 8-reviewer pass and staging CI
entrypoint.sh: a container started without a GPU request has no
nvidia-smi at all (the toolkit injects it), so the old check 1 reported
'CUDA runtime in this image is broken, re-pull' for the most common user
error. Fold the missing-binary case into the actionable 'No GPU visible'
message and document the CPU-only option (UNSLOTH_ALLOW_CPU=1).
run.sh / test_locally.sh: guard empty-array expansions with the
${arr[@]+...} form; bash 3.2 (macOS /bin/bash) treats "${empty[@]}"
as unbound under set -u, which broke the documented macOS CPU path.
studio_launch.sh: exclude *_TOKEN, *_API_KEY, *_PASSWORD, *_SECRET,
*_LICENSE from the env snapshot written for SSH sessions; secrets stay
in process env only, never on disk.
supervisord.conf / Dockerfile.studio: pin HOME=/root for the studio and
jupyter programs (jupyter would silently fall back to token auth if HOME
were unset), default JUPYTER_PORT and UNSLOTH_ENABLE_SSHD at the image
level so a direct supervisord invocation cannot hit a bad %(ENV_*)s
expansion, and document the root-services decision (non-root parity with
the previous production image is a tracked follow-up).
docker_confirm.ps1: mirror the bash script's GPU selector translation so
GPUS=0 / 0,1 select devices instead of silently using all GPUs.
docker-publish.yml: studio cache scope moves to mode=min; a mode=max
cache of a ~24GB image would evict everything else in the 10GB GHA
quota for no hit-rate gain.
This commit is contained in:
parent
c62bb1906d
commit
f4e378e8b5
8 changed files with 52 additions and 18 deletions
|
|
@ -35,8 +35,19 @@ FROM ${BASE_IMAGE}
|
|||
ARG UNSLOTH_STUDIO_REF=main
|
||||
ARG TARGETARCH
|
||||
|
||||
# Services run as root in this revision (the base image is root-only by
|
||||
# design); the previous production image ran them as a dedicated uid-1001
|
||||
# user. Non-root parity is a tracked follow-up. sshd is key-only and stays
|
||||
# disabled unless a PUBLIC_KEY/SSH_KEY is provided, and no secrets are
|
||||
# persisted to disk (see studio_launch.sh).
|
||||
#
|
||||
# The JUPYTER_PORT / UNSLOTH_ENABLE_SSHD defaults exist so supervisord's
|
||||
# %(ENV_*)s expansions still resolve when someone bypasses the launcher
|
||||
# and runs supervisord directly.
|
||||
USER root
|
||||
ENV UNSLOTH_STUDIO_HOME=/opt/unsloth-studio \
|
||||
JUPYTER_PORT=8888 \
|
||||
UNSLOTH_ENABLE_SSHD=false \
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# install.sh needs curl + git; supervisor + openssh-server run the service
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue