Dockerfile を丁寧に作る
2025.2.1 の最終形態
# 1. 公式の PyTorch イメージをベースにする
FROM docker.io/rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1
# 2. 作業ディレクトリの設定
WORKDIR /app
# 3. uv のインストール(環境構築を高速化するため)
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:$PATH"
#
RUN apt-get update && apt-get install -y \
curl \
vim \
git \
&& rm -rf /var/lib/apt/lists/*
RUN cat <<'EOF' >> /etc/skel/.bashrc
# --- Added for Strix Halo Environment ---
# 実行時にパスを特定(隔離されていてもパス文字列として /home/username を取得)
REAL_HOME=$(echo "${HOME}" | cut -d "/" -f 1-3)
# このパスがホスト側の実体と繋がっているなら、これだけで全て解決
export HF_HOME="${REAL_HOME}/models/huggingface"
# 2. 三種の神器(Models, Input, Output)をホストへ直結
for dir in models input output; do
TARGET_DIR="/app/ComfyUI/$dir"
if [ -d "$TARGET_DIR" ] && [ ! -L "$TARGET_DIR" ]; then
rm -rf "$TARGET_DIR"
ln -s "${REAL_HOME}/ComfyUI/$dir" "$TARGET_DIR"
echo "🔗 Linked $dir to ${REAL_HOME}/ComfyUI/$dir"
fi
done
export VIRTUAL_ENV_DISABLE_PROMPT=1
ROCm_V=$(cat /opt/rocm-*/.info/version 2>/dev/null | head -n 1 | cut -d. -f1,2 || echo "no-rocm")
C_NAME=$(grep "name=" /run/.containerenv 2>/dev/null | cut -d"\"" -f2 || hostname)
PS1='$( [ -n "$VIRTUAL_ENV" ] && echo "\[\e[1;32m\][$(basename $VIRTUAL_ENV)] \[\e[m\]" )\[\e[1;36m\]📦 \[\e[1;34m\]$C_NAME\[\e[m\]:\[\e[1;35m\]$ROCm_V\[\e[m\] \[\e[1;33m\]\w\[\e[m\] \$ '
# venvを自動ロードするようにしておく(お好みで)
if [ -d "/opt/venv" ]; then
source /opt/venv/bin/activate
fi
EOF
# 6. vLLM のインストール
ENV VIRTUAL_ENV=/opt/venv
RUN git clone https://github.com/comfyanonymous/ComfyUI.git
WORKDIR /app/ComfyUI
RUN uv pip install -r requirements.txt
RUN uv pip install -r manager_requirements.txt
# この Downloader がいけてる
RUN git clone https://github.com/romandev-codex/ComfyUI-Downloader ./custom_nodes/ComfyUI-Downloader && \
cd custom_nodes/ComfyUI-Downloader && \
uv pip install -r requirements.txt
# Download 速度アップ FLAG だけど、トラブルにつながる報告もすくなくない
# 大きな model を Download するときは Container内で 1 にするなどの対応がよい
ENV HF_HUB_ENABLE_HF_TRANSFER=0
# 7. 起動用スクリプトの作成
RUN echo '#!/bin/bash\n\
source /opt/venv/bin/activate\n\
# export HSA_OVERRIDE_GFX_VERSION=11.0.0\n\
export HIP_VISIBLE_DEVICES=0\n\
cd /app/ComfyUI\n\
python3 main.py --highvram --listen --enable-manager --enable-manager-legacy-ui' > /usr/local/bin/run_comfy.sh && \
chmod +x /usr/local/bin/run_comfy.sh
# 作業ディレクトリを戻しておく
WORKDIR /app/ComfyUI
# 権限設定 (そこそこ時間がかかる)
RUN chown -R 1000:1000 /opt/venv /app
# 自動起動するなら
# CMD ["/bin/bash", "-c", "source /opt/venv/bin/activate && export HSA_OVERRIDE_GFX_VERSION=11.0.0 && python3 main.py --highvram --listen"]distrbox 起動方法
$ podman build -f Dockerfile.comfyUI -t rocm7.2-comfy .
$ distrobox create -n rocm72-comfy -i localhost/rocm7.2-comfy --additional-flags "--device /dev/kfd --device /dev/dri --group-add video --group-add render --security-opt seccomp=unconfined" --home ~/distrobox_homes/rocm72-comfysymlink について要検討
[Container_Home]/ComfyUI/models, input, output は
[Host_Home]/ComfyUI/models, input, output にリンクしたい
.bashrc (/etc/skel/.bashrc) に、symlink をかいているが、それは systemd 起動時にはタイミングの問題か機能しない。
一度、distrobox enter しておけば、.bashrc の初期処理が動くので問題ないが、うっかりがあると美しくない状態であることに留意。
/usr/local/bin/run_comfy.sh に symlink を移せば解決するが、どうしようか思案。
常時起動にする
本当の常時起動に
通常、—user サービスは「ユーザーがログインした時」に開始され、「ログアウトした時」に終了します。注意が必要です。
systemd —user は、その名の通り「ユーザーに紐付いた管理システム」です。
ログイン時: あなたのための systemd プロセスが起動し、サービスを開始する。
ログアウト時: あなたが去ったので、後片付けとして systemd ごとサービスをすべて道連れに終了させる。
解決策:loginctl enable-linger
これを解決するのが「Linger(居残り)」設定です。
このコマンドを一度打つだけで、挙動が以下のように変わります:
起動時: ログインを待たずに、システム起動と同時にあなたの —user サービスが動き出す。
ログアウト後: あなたがログアウトしても、サービスは裏で動き続ける。
$ loginctl enable-linger