mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-16 01:00:49 +08:00
64 lines
2.4 KiB
Bash
Executable File
64 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Entrypoint script for the ComfyUI Docker image.
|
|
|
|
set -e
|
|
|
|
user="comfyui"
|
|
user_group="$user"
|
|
|
|
# Allow users to specify a UID and GID matching their own, so files created
|
|
# inside the container retain the same numeric ownership when mounted on the
|
|
# host.
|
|
if [ -n "$UID" ] && [ -n "$GID" ]; then
|
|
echo "[entrypoint] Setting user UID and GID..."
|
|
usermod -u "$UID" "$user" > /dev/null
|
|
groupmod -g "$GID" "$user_group"
|
|
else
|
|
echo "[entrypoint] Missing UID or GID environment variables; keeping default values."
|
|
fi
|
|
|
|
# Changing a user's UID and GID revokes that user's access to files owned by the
|
|
# original UID/GID. To preserve access to runtime data, the ownership of those
|
|
# directories must be updated recursively so that their numeric owner matches
|
|
# the user's new UID and GID.
|
|
echo "[entrypoint] Changing directory ownership..."
|
|
chown -R "$user:$user_group" \
|
|
/data \
|
|
/comfyui \
|
|
/home/comfyui
|
|
|
|
# To use CUDA and other NVIDIA features, regular users must belong to the group
|
|
# that owns the /dev/nvidia* device files -- typically the video group.
|
|
#
|
|
# Known issue: Because these device files are mounted from the host system,
|
|
# there's no guarantee that the device's group ID will match the intended group
|
|
# inside the container. For example, the video group might be mapped to GID 27
|
|
# on the host, which corresponds to the sudo group in the python:3.12 image.
|
|
# This shouldn't cause major problems, and given the lack of a universal
|
|
# standard for system GIDs, there isn't much we can realistically change to
|
|
# address this issue.
|
|
echo "[entrypoint] Adding user to GPU device groups..."
|
|
for dev in /dev/nvidia*; do
|
|
group=$(ls -ld "$dev" | awk '{print $4}')
|
|
usermod -aG "$group" "$user"
|
|
done
|
|
|
|
# Install or update the Python dependencies defined by ComfyUI (or any installed
|
|
# custom node) and also install any user-defined dependencies specified in
|
|
# PIP_EXTRA_PACKAGES.
|
|
echo "[entrypoint] Updating Python dependencies..."
|
|
su -c "
|
|
pip install \\
|
|
--no-cache-dir \\
|
|
--disable-pip-version-check \\
|
|
-r requirements.txt \\
|
|
$(find custom_nodes -mindepth 2 -maxdepth 2 -type f -name requirements.txt -printf "-r '%p' ") \\
|
|
$PIP_EXTRA_PACKAGES
|
|
" comfyui \
|
|
|| echo "[entrypoint] Failed to install dependencies, starting anyway" >&2
|
|
|
|
# Run command as comfyui
|
|
echo "[entrypoint] Running command"
|
|
exec su -c "$*" comfyui
|