镜像构建历史
# 2026-04-10 18:33:37 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# 2026-04-10 18:33:37 0.00B 指定检查容器健康状态的命令
HEALTHCHECK &{["CMD-SHELL" "curl -sf http://localhost:3001/ || exit 1"] "30s" "5s" "30s" "0s" '\x03'}
# 2026-04-10 18:33:37 0.00B 设置工作目录为/workspace
WORKDIR /workspace
# 2026-04-10 18:33:37 283.00B 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c chmod +x /etc/s6-overlay/s6-rc.d/cloudcli/run /etc/s6-overlay/s6-rc.d/xvfb/run && touch /etc/s6-overlay/s6-rc.d/user/contents.d/cloudcli && touch /etc/s6-overlay/s6-rc.d/user/contents.d/xvfb # buildkit
# 2026-04-10 18:33:37 61.00B 复制新文件或目录到容器中
COPY s6-overlay/s6-rc.d/xvfb/run /etc/s6-overlay/s6-rc.d/xvfb/run # buildkit
# 2026-04-10 18:33:37 8.00B 复制新文件或目录到容器中
COPY s6-overlay/s6-rc.d/xvfb/type /etc/s6-overlay/s6-rc.d/xvfb/type # buildkit
# 2026-04-10 18:33:37 222.00B 复制新文件或目录到容器中
COPY s6-overlay/s6-rc.d/cloudcli/run /etc/s6-overlay/s6-rc.d/cloudcli/run # buildkit
# 2026-04-10 18:33:37 8.00B 复制新文件或目录到容器中
COPY s6-overlay/s6-rc.d/cloudcli/type /etc/s6-overlay/s6-rc.d/cloudcli/type # buildkit
# 2026-04-10 18:33:37 10.13KB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh /usr/local/bin/bootstrap.sh /usr/local/bin/notify.py # buildkit
# 2026-04-10 18:33:37 7.82KB 复制新文件或目录到容器中
COPY config/claude-memory-slim.md /usr/local/share/holyclaude/claude-memory-slim.md # buildkit
# 2026-04-10 18:33:37 6.52KB 复制新文件或目录到容器中
COPY config/claude-memory-full.md /usr/local/share/holyclaude/claude-memory-full.md # buildkit
# 2026-04-10 18:33:37 512.00B 复制新文件或目录到容器中
COPY config/settings.json /usr/local/share/holyclaude/settings.json # buildkit
# 2026-04-10 18:33:37 1.66KB 复制新文件或目录到容器中
COPY scripts/notify.py /usr/local/bin/notify.py # buildkit
# 2026-04-10 18:33:37 4.14KB 复制新文件或目录到容器中
COPY scripts/bootstrap.sh /usr/local/bin/bootstrap.sh # buildkit
# 2026-04-10 18:33:37 4.34KB 复制新文件或目录到容器中
COPY scripts/entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit
# 2026-04-10 18:33:37 5.00B 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c echo "${VARIANT}" > /etc/holyclaude-variant # buildkit
# 2026-04-10 18:33:37 0.00B 指定运行容器时使用的用户
USER root
# 2026-04-10 18:33:37 228.39MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c mkdir -p /home/claude/.claude-code-ui/plugins && git clone --depth 1 https://github.com/cloudcli-ai/cloudcli-plugin-starter.git /home/claude/.claude-code-ui/plugins/project-stats && cd /home/claude/.claude-code-ui/plugins/project-stats && npm install && npm run build && git clone --depth 1 https://github.com/cloudcli-ai/cloudcli-plugin-terminal.git /home/claude/.claude-code-ui/plugins/web-terminal && cd /home/claude/.claude-code-ui/plugins/web-terminal && npm install && npm run build && echo '{"project-stats":{"name":"project-stats","source":"https://github.com/cloudcli-ai/cloudcli-plugin-starter","enabled":true},"web-terminal":{"name":"web-terminal","source":"https://github.com/cloudcli-ai/cloudcli-plugin-terminal","enabled":true}}' > /home/claude/.claude-code-ui/plugins.json # buildkit
# 2026-04-10 18:33:22 0.00B 指定运行容器时使用的用户
USER claude
# 2026-04-10 18:33:22 2.35MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c CLOUDCLI_BUNDLE="/usr/local/lib/node_modules/@siteboon/claude-code-ui/dist/assets/index-X3ImjnMV.js" && grep -q 'children:N.OPTIONS.map(({value:C,label:j})=>s.jsx("option",{value:C,children:j},C+j))}' "$CLOUDCLI_BUNDLE" && perl -pi -e 's/\Qchildren:N.OPTIONS.map(({value:C,label:j})=>s.jsx("option",{value:C,children:j},C+j))}\E/children:[...N.OPTIONS.map(({value:C,label:j})=>s.jsx("option",{value:C,children:j},C+j)),!N.OPTIONS.some(C=>C.value===k)\&\&k\&\&s.jsx("option",{value:k,children:k},k+"custom")].filter(Boolean)}/g' "$CLOUDCLI_BUNDLE" && echo "[patch] bundle custom model select option applied" || echo "[patch] WARNING: bundle custom model select pattern not found, skipping patch" # buildkit
# 2026-04-10 18:33:22 2.35MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c CLOUDCLI_BUNDLE="/usr/local/lib/node_modules/@siteboon/claude-code-ui/dist/assets/index-X3ImjnMV.js" && grep -q 'case"model":k({type:"assistant"' "$CLOUDCLI_BUNDLE" && perl -pi -e 's/\Qcase"model":k({type:"assistant"\E/case"model":me.newModel\&\&lS2\&\&(lS2(me.newModel),localStorage.setItem("claude-model",me.newModel));k({type:"assistant"/g' "$CLOUDCLI_BUNDLE" && echo "[patch] bundle SSE model event handler applied" || echo "[patch] WARNING: bundle case\"model\" pattern not found, skipping patch" # buildkit
# 2026-04-10 18:33:22 2.35MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c CLOUDCLI_BUNDLE="/usr/local/lib/node_modules/@siteboon/claude-code-ui/dist/assets/index-X3ImjnMV.js" && grep -q 'cursorModel:o,claudeModel:l,codexModel:c' "$CLOUDCLI_BUNDLE" && perl -pi -e 's/\QcursorModel:o,claudeModel:l,codexModel:c\E/cursorModel:o,claudeModel:l,setClaudeModel:lS2,codexModel:c/g' "$CLOUDCLI_BUNDLE" && echo "[patch] bundle setClaudeModel:lS2 destructure applied" || echo "[patch] WARNING: bundle cursorModel destructure pattern not found, skipping patch" # buildkit
# 2026-04-10 18:33:22 2.35MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c CLOUDCLI_BUNDLE="/usr/local/lib/node_modules/@siteboon/claude-code-ui/dist/assets/index-X3ImjnMV.js" && grep -q 'claudeModel:W,codexModel:V' "$CLOUDCLI_BUNDLE" && perl -pi -e 's/\QclaudeModel:W,codexModel:V\E/claudeModel:W,setClaudeModel:L,codexModel:V/g' "$CLOUDCLI_BUNDLE" && echo "[patch] bundle setClaudeModel context spread applied" || echo "[patch] WARNING: bundle claudeModel:W pattern not found, skipping patch" # buildkit
# 2026-04-10 18:33:22 17.13KB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c CLOUDCLI_COMMANDS="/usr/local/lib/node_modules/@siteboon/claude-code-ui/server/routes/commands.js" && grep -q 'message: args.length > 0' "$CLOUDCLI_COMMANDS" && perl -pi -e 's/^(\s+)(message: args\.length > 0)/$1newModel: args.length > 0 ? args[0] : null,\n$1$2/' "$CLOUDCLI_COMMANDS" && echo "[patch] commands.js newModel field added" || echo "[patch] WARNING: commands.js newModel pattern not found, skipping patch" # buildkit
# 2026-04-10 18:33:22 2.35MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c CLOUDCLI_BUNDLE="/usr/local/lib/node_modules/@siteboon/claude-code-ui/dist/assets/index-X3ImjnMV.js" && grep -q 'const B=()=>{v.current?.focus()}' "$CLOUDCLI_BUNDLE" && perl -pi -e 's/const B=\(\)=>\{v\.current\?\.focus\(\)\}/const B=()=>{const _vp=v.current?.buffer?.active?.viewportY??0;v.current?.focus();v.current?.scrollToLine(_vp)}/g' "$CLOUDCLI_BUNDLE" && echo "[patch] Shell scroll position fix applied" || echo "[patch] WARNING: Shell scroll pattern not found in vendored CloudCLI bundle, skipping patch" # buildkit
# 2026-04-10 18:33:22 104.05KB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c CLOUDCLI_INDEX="/usr/local/lib/node_modules/@siteboon/claude-code-ui/server/index.js" && grep -q "upstream.on('message', (data) =>" "$CLOUDCLI_INDEX" && sed -i "s/upstream.on('message', (data) => {/upstream.on('message', (data, isBinary) => {/" "$CLOUDCLI_INDEX" && sed -i "s/if (clientWs.readyState === WebSocket.OPEN) clientWs.send(data)/if (clientWs.readyState === WebSocket.OPEN) clientWs.send(data, { binary: isBinary })/" "$CLOUDCLI_INDEX" && sed -i "s/clientWs.on('message', (data) => {/clientWs.on('message', (data, isBinary) => {/" "$CLOUDCLI_INDEX" && sed -i "s/if (upstream.readyState === WebSocket.OPEN) upstream.send(data)/if (upstream.readyState === WebSocket.OPEN) upstream.send(data, { binary: isBinary })/" "$CLOUDCLI_INDEX" && echo "[patch] WebSocket frame type fix applied (both directions)" || echo "[patch] WARNING: WebSocket pattern not found in vendored CloudCLI install, skipping patch" # buildkit
# 2026-04-10 18:33:22 0.00B 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c touch /usr/local/lib/node_modules/@siteboon/claude-code-ui/.env # buildkit
# 2026-04-10 18:33:21 525.69MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c npm i -g /tmp/vendor/siteboon-claude-code-ui-1.26.3.tgz && rm -f /tmp/vendor/siteboon-claude-code-ui-1.26.3.tgz # buildkit
# 2026-04-10 18:32:58 3.56MB 复制新文件或目录到容器中
COPY vendor/artifacts/siteboon-claude-code-ui-1.26.3.tgz /tmp/vendor/siteboon-claude-code-ui-1.26.3.tgz # buildkit
# 2026-04-10 18:32:58 989.53MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c if [ "$VARIANT" = "full" ]; then npm i -g opencode-ai; fi # buildkit
# 2026-04-10 18:32:48 0.00B 指定运行容器时使用的用户
USER root
# 2026-04-10 18:32:48 301.24MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c if [ "$VARIANT" = "full" ]; then curl -fsSL https://junie.jetbrains.com/install.sh | bash; fi # buildkit
# 2026-04-10 18:32:40 0.00B 指定运行容器时使用的用户
USER claude
# 2026-04-10 18:32:40 0.00B 指定运行容器时使用的用户
USER root
# 2026-04-10 18:32:40 168.30MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c curl -fsSL https://cursor.com/install | bash # buildkit
# 2026-04-10 18:32:36 0.00B 指定运行容器时使用的用户
USER claude
# 2026-04-10 18:32:36 1.85GB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c npm i -g @google/gemini-cli @openai/codex task-master-ai # buildkit
# 2026-04-10 18:31:52 196.67MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c if [ "$VARIANT" = "full" ]; then pip install --no-cache-dir --break-system-packages reportlab weasyprint cairosvg fpdf2 PyMuPDF pdfkit img2pdf xlsxwriter xlrd matplotlib seaborn python-pptx fastapi uvicorn httpie; fi # buildkit
# 2026-04-10 18:31:35 355.87MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c pip install --no-cache-dir --break-system-packages requests httpx beautifulsoup4 lxml Pillow pandas numpy openpyxl python-docx jinja2 pyyaml python-dotenv markdown rich click tqdm playwright apprise # buildkit
# 2026-04-10 18:31:18 3.24GB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c if [ "$VARIANT" = "full" ]; then npm i -g wrangler vercel netlify-cli pm2 prisma drizzle-kit eas-cli lighthouse @lhci/cli sharp-cli json-server http-server @marp-team/marp-cli @cloudflare/next-on-pages; fi # buildkit
# 2026-04-10 18:29:40 282.30MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c npm i -g typescript tsx pnpm vite esbuild eslint prettier serve nodemon concurrently dotenv-cli # buildkit
# 2026-04-10 18:29:30 0.00B 设置环境变量 PATH
ENV PATH=/home/claude/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-04-10 18:29:30 0.00B 指定运行容器时使用的用户
USER root
# 2026-04-10 18:29:30 233.86MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c curl -fsSL https://claude.ai/install.sh | bash # buildkit
# 2026-04-10 18:29:19 0.00B 指定运行容器时使用的用户
USER claude
# 2026-04-10 18:29:19 0.00B 设置工作目录为/workspace
WORKDIR /workspace
# 2026-04-10 18:29:19 9.82KB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c usermod -l claude -d /home/claude -m node && groupmod -n claude node && echo "claude ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/claude && chmod 0440 /etc/sudoers.d/claude # buildkit
# 2026-04-10 18:29:19 3.06MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen # buildkit
# 2026-04-10 18:29:18 15.00B 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c ln -sf /usr/bin/batcat /usr/local/bin/bat 2>/dev/null || true # buildkit
# 2026-04-10 18:29:18 41.82MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg 2>/dev/null && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list && apt-get update && apt-get install -y gh && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-04-10 18:29:14 595.26MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c if [ "$VARIANT" = "full" ]; then curl -sL https://aka.ms/InstallAzureCLIDeb | bash && rm -rf /var/lib/apt/lists/*; fi # buildkit
# 2026-04-10 18:28:59 591.90MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c if [ "$VARIANT" = "full" ]; then apt-get update && apt-get install -y --no-install-recommends pandoc ffmpeg libvips-dev && rm -rf /var/lib/apt/lists/*; fi # buildkit
# 2026-04-10 18:28:38 72.08KB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c chmod u+s /usr/bin/bwrap # buildkit
# 2026-04-10 18:28:38 1.20GB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c apt-get update && apt-get install -y --no-install-recommends git curl wget jq ripgrep fd-find unzip zip tree tmux fzf bat bubblewrap build-essential pkg-config python3 python3-pip python3-venv chromium fonts-liberation2 fonts-dejavu-core fonts-noto-core fonts-noto-color-emoji fonts-inter locales strace lsof iproute2 procps htop postgresql-client redis-tools sqlite3 openssh-client xvfb imagemagick sudo && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-04-10 18:27:57 5.26MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c S6_ARCH=$(case "$TARGETARCH" in arm64) echo "aarch64";; *) echo "x86_64";; esac) && curl -fsSL -o /tmp/s6-overlay-arch.tar.xz "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" && tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz && tar -C / -Jxpf /tmp/s6-overlay-arch.tar.xz && rm /tmp/s6-overlay-*.tar.xz # buildkit
# 2026-04-10 18:27:56 6.76KB 复制文件或目录到容器中
ADD https://github.com/just-containers/s6-overlay/releases/download/v3.2.0.2/s6-overlay-noarch.tar.xz /tmp/ # buildkit
# 2026-04-10 18:27:56 14.69MB 执行命令并创建新的镜像层
RUN |3 S6_OVERLAY_VERSION=3.2.0.2 TARGETARCH=amd64 VARIANT=full /bin/sh -c apt-get update && apt-get install -y --no-install-recommends xz-utils curl ca-certificates && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-04-10 18:27:56 0.00B 设置环境变量 DEBIAN_FRONTEND LANG LC_ALL DISPLAY DBUS_SESSION_BUS_ADDRESS CHROMIUM_FLAGS CHROME_PATH PUPPETEER_EXECUTABLE_PATH
ENV DEBIAN_FRONTEND=noninteractive LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 DISPLAY=:99 DBUS_SESSION_BUS_ADDRESS=disabled: CHROMIUM_FLAGS=--no-sandbox --disable-gpu --disable-dev-shm-usage CHROME_PATH=/usr/bin/chromium PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
# 2026-04-10 18:27:56 0.00B 定义构建参数
ARG VARIANT=full
# 2026-04-10 18:27:56 0.00B 定义构建参数
ARG TARGETARCH=amd64
# 2026-04-10 18:27:56 0.00B 定义构建参数
ARG S6_OVERLAY_VERSION=3.2.0.2
# 2026-04-10 18:27:56 0.00B 添加元数据标签
LABEL org.opencontainers.image.source=https://github.com/CoderLuii/HolyClaude
# 2026-04-07 10:02:21 0.00B 设置默认要执行的命令
CMD ["node"]
# 2026-04-07 10:02:21 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["docker-entrypoint.sh"]
# 2026-04-07 10:02:21 388.00B 复制新文件或目录到容器中
COPY docker-entrypoint.sh /usr/local/bin/ # buildkit
# 2026-04-07 10:02:21 7.18MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -ex && savedAptMark="$(apt-mark showmanual)" && apt-get update && apt-get install -y ca-certificates curl wget gnupg dirmngr --no-install-recommends && rm -rf /var/lib/apt/lists/* && export GNUPGHOME="$(mktemp -d)" && for key in 6A010C5166006599AA17F08146C2130DFD2497F5 ; do { gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" && gpg --batch --fingerprint "$key"; } || { gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" && gpg --batch --fingerprint "$key"; } ; done && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz && gpgconf --kill all && rm -rf "$GNUPGHOME" && mkdir -p /opt && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz && apt-mark auto '.*' > /dev/null && { [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; } && find /usr/local -type f -executable -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' | sort -u | xargs -r dpkg-query --search | cut -d: -f1 | sort -u | xargs -r apt-mark manual && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false && yarn --version && rm -rf /tmp/* # buildkit
# 2026-04-07 10:02:09 0.00B 设置环境变量 YARN_VERSION
ENV YARN_VERSION=1.22.22
# 2026-04-07 10:02:09 145.13MB 执行命令并创建新的镜像层
RUN /bin/sh -c ARCH= OPENSSL_ARCH= && dpkgArch="$(dpkg --print-architecture)" && case "${dpkgArch##*-}" in amd64) ARCH='x64' OPENSSL_ARCH='linux-x86_64';; ppc64el) ARCH='ppc64le' OPENSSL_ARCH='linux-ppc64le';; s390x) ARCH='s390x' OPENSSL_ARCH='linux*-s390x';; arm64) ARCH='arm64' OPENSSL_ARCH='linux-aarch64';; armhf) ARCH='armv7l' OPENSSL_ARCH='linux-armv4';; i386) ARCH='x86' OPENSSL_ARCH='linux-elf';; *) echo "unsupported architecture"; exit 1 ;; esac && set -ex && apt-get update && apt-get install -y ca-certificates curl wget gnupg dirmngr xz-utils libatomic1 --no-install-recommends && rm -rf /var/lib/apt/lists/* && export GNUPGHOME="$(mktemp -d)" && for key in 5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 CC68F5A3106FF448322E48ED27F5E38D5B0A215F 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C 108F52B48DB57BB0CC439B2997B01419BD92F80A A363A499291CBBC940DD62E41F10027AF002F8B0 ; do { gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" && gpg --batch --fingerprint "$key"; } || { gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" && gpg --batch --fingerprint "$key"; } ; done && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc && gpgconf --kill all && rm -rf "$GNUPGHOME" && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt && find /usr/local/include/node/openssl/archs -mindepth 1 -maxdepth 1 ! -name "$OPENSSL_ARCH" -exec rm -rf {} \; && apt-mark auto '.*' > /dev/null && find /usr/local -type f -executable -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' | sort -u | xargs -r dpkg-query --search | cut -d: -f1 | sort -u | xargs -r apt-mark manual && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false && ln -s /usr/local/bin/node /usr/local/bin/nodejs && node --version && npm --version && rm -rf /tmp/* # buildkit
# 2026-04-07 10:02:09 0.00B 设置环境变量 NODE_VERSION
ENV NODE_VERSION=22.22.2
# 2026-04-07 10:01:48 8.90KB 执行命令并创建新的镜像层
RUN /bin/sh -c groupadd --gid 1000 node && useradd --uid 1000 --gid node --shell /bin/bash --create-home node # buildkit
# 2026-04-06 08:00:00 74.83MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1775433600'
镜像信息
{
"Id": "sha256:b89c7a1d61f4d398aee95de62e535e56debc8193cbb8bdd2c5de9b4096aff021",
"RepoTags": [
"coderluii/holyclaude:latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/coderluii/holyclaude:latest"
],
"RepoDigests": [
"coderluii/holyclaude@sha256:e897a524634b762ed486cfe38a49367ae60d78c11355dc59c700b7b9377f48de",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/coderluii/holyclaude@sha256:a45444e06ef2b759e4ceaae89af50b96baedae9d0f0722f13d5e97399bae0582"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-04-10T10:33:37.828904301Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "root",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/home/claude/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=22.22.2",
"YARN_VERSION=1.22.22",
"DEBIAN_FRONTEND=noninteractive",
"LANG=en_US.UTF-8",
"LC_ALL=en_US.UTF-8",
"DISPLAY=:99",
"DBUS_SESSION_BUS_ADDRESS=disabled:",
"CHROMIUM_FLAGS=--no-sandbox --disable-gpu --disable-dev-shm-usage",
"CHROME_PATH=/usr/bin/chromium",
"PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium"
],
"Cmd": null,
"Healthcheck": {
"Test": [
"CMD-SHELL",
"curl -sf http://localhost:3001/ || exit 1"
],
"Interval": 30000000000,
"Timeout": 5000000000,
"StartPeriod": 30000000000,
"Retries": 3
},
"Image": "",
"Volumes": null,
"WorkingDir": "/workspace",
"Entrypoint": [
"/usr/local/bin/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2026-04-10T10:27:44.935Z",
"org.opencontainers.image.description": "AI coding workstation: Claude Code + web UI + 7 AI CLIs + headless browser + 50+ tools",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.revision": "84d154ec1b842577fdaeb29587afd91add1336a8",
"org.opencontainers.image.source": "https://github.com/CoderLuii/HolyClaude",
"org.opencontainers.image.title": "HolyClaude",
"org.opencontainers.image.url": "https://github.com/CoderLuii/HolyClaude",
"org.opencontainers.image.version": "1.2.2"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 11061193825,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/5d27dcb19d81dd6829c62e3df89883a43b5bc4b49a3b3286506594e9bb0b8f65/diff:/var/lib/docker/overlay2/76e7c7394c411d8a6c03d72bc4d54019118c9cc63085702a8facfd8d4c499496/diff:/var/lib/docker/overlay2/4a50b04396ab5e0bfa3e22d7b76b28e860aae4c78c7158d8ffaa540a2798b1a0/diff:/var/lib/docker/overlay2/b5b3c8f85950ed9e62274cb78c15c840d983e7238419336328e0cda11b10b04c/diff:/var/lib/docker/overlay2/58f628630bef41d0caa93f0c8bb726f026359fede49999319a91f2c3d4481f8f/diff:/var/lib/docker/overlay2/2343fbbafca761daa90bd9eddc9f64e8ac1ba31fe447e020916b34753ac9e5b8/diff:/var/lib/docker/overlay2/620ed0dbeabc71127e3f7aa52e423232ad663d4a69ddbbb63098e842e49b1669/diff:/var/lib/docker/overlay2/87eaebe01470822342ff1d18ce69f64a7f04089507fc511a806a58ecea1c41b2/diff:/var/lib/docker/overlay2/1c480d3b7c4be2ee549feb0fecfd5ddf2b4b818c4c4c9e4a0b955c01e96a656f/diff:/var/lib/docker/overlay2/eb47c92fa790ee5c41aa6583f2110b99e0c7cec8016fd3229c864b1db960ac32/diff:/var/lib/docker/overlay2/4596a13b9223b6936f999e3254c1f6302a23f635bc2b19b7d0cf007ef6eb078c/diff:/var/lib/docker/overlay2/a97d60afb0d34c894ec8fff09659a2dcfeaacf6744fa17cd5a57f1e3e59c599c/diff:/var/lib/docker/overlay2/1c8a90a40d2525364e79a62969cbbf3bac10f8623d727db6757a4b94c2ca6108/diff:/var/lib/docker/overlay2/601b6868a221558d042a84a3900c17ebd36300c1fd9ea8de47897191388f11a7/diff:/var/lib/docker/overlay2/c757c6f787d484190aeb3c426379df56fcb794c76b28bf6713ee20f6d176b922/diff:/var/lib/docker/overlay2/e30a12bd4e66328db06940ba7788c805c4298d99acf8989c2e38e3e43dd23520/diff:/var/lib/docker/overlay2/37480fe52cf0946cbd810b638d9f2d66d6a014365cbe7ef26102c45329bdfbb8/diff:/var/lib/docker/overlay2/d4e33f81434cbd53213b2ddba901bb39d9ba42cc2db2315bb38f47357f4578a1/diff:/var/lib/docker/overlay2/bf129ce64c2d2c876f2371edab9fcee375d3e3b1aee338f8f562599638c72278/diff:/var/lib/docker/overlay2/1d7be1952f53ba3e0ebcd2107f2141ff0784c426b3076a1911d9b09ea42fb717/diff:/var/lib/docker/overlay2/5a09e98808fe49895706c121e32c878358fd7adb229881d47eddd6dae09a641e/diff:/var/lib/docker/overlay2/3a4a815f0b95d20a9ec01c10d071e9debc7c0ab95fb9a9090ab50781e5c1274d/diff:/var/lib/docker/overlay2/49a1b3ca3cb8686d49904998f42bdc301e5d28240001a7376df928821d5110ab/diff:/var/lib/docker/overlay2/2ee684cf0ee8586cd0628e32aefa4d241b700ba6b175c755fee6af5add176ba5/diff:/var/lib/docker/overlay2/ca77e2ac04e2071b6dde37687f733e200ccb56ae51cac719b8c2337711135434/diff:/var/lib/docker/overlay2/2a3a3dde3d452668115a592a57eecced7337a39cca047a52cc25834fb5587e93/diff:/var/lib/docker/overlay2/852e3399729251f4ac672d899d4634074256a45c27bcccb06f53c258bc9d94ae/diff:/var/lib/docker/overlay2/f8868ca516c2f104efd16c60de6d19faefcf8a2123dd1066f6d3075d52983602/diff:/var/lib/docker/overlay2/27e2b66caf25554a7253218b71f1a343b8b05c567ec96e77155f3555be9cb467/diff:/var/lib/docker/overlay2/1307df7f0df87fbe87d5411bca6c3ab67432994e0f17a33fd7a89bc432cd317c/diff:/var/lib/docker/overlay2/b77c6e93441c7c240229e7fb219eecaf1793f5d44fab7afe78c74ec8be4e1d70/diff:/var/lib/docker/overlay2/06676e618627817db9f7b48a21c7f3d67e0ae53b3ce29d18e22f112ed6f24baa/diff:/var/lib/docker/overlay2/55378d6722476de9a3f664347ea6ebf6be3efa6b5d85cfa4d5b8a29ecd10a9d7/diff:/var/lib/docker/overlay2/97572e038d1499d9fc353171db8981b9957a1e257d4464f52466ac025ffa2e39/diff:/var/lib/docker/overlay2/e50e84153137c54327c13fc8bcd9725462f50680acbbd1be4c43650cf6cb1540/diff:/var/lib/docker/overlay2/a3e5cd456a574c80572bfbc63194fb0b724703e85c5adb63f284edc5e836fe5b/diff:/var/lib/docker/overlay2/0a79ac1b9434104b470e86b4bf01fcc7c67f65b807763133ff5fc02f2aa0d8eb/diff:/var/lib/docker/overlay2/a7c876285577689e1b0b192f39050a0e0411eee0e15f4742b0d2e264cb6e38f4/diff:/var/lib/docker/overlay2/113abf21145934e96541550b17d78a0e3e0455f68ba0aedbd3f1b749532446e3/diff:/var/lib/docker/overlay2/0e444939aa426e13db92f3b55d0a39762f9f8afde9c28e7b2c1ab731b71db264/diff:/var/lib/docker/overlay2/0d3260931a096165891309cd1770672314a2578ef751f98cff0566a9f3bf624b/diff:/var/lib/docker/overlay2/b4e7e15efd1d36b81dc5d6c7e3712e90ea0a0b84a6f957a6a10c2f0ac348d959/diff:/var/lib/docker/overlay2/9ccf3f95f4e4f8c6ba5a8d122774ebd77f7ac53b0d55e2e37548da2824b03fa7/diff:/var/lib/docker/overlay2/f665ad2ae4eb911ab9f3411327844907219608302e0c98d20e65fe751dfcf3df/diff:/var/lib/docker/overlay2/454b72290fb9127e53f63146d278521bc9094c79e5aee04e721b80ed3dc1be02/diff:/var/lib/docker/overlay2/669bbdd0d0f3d88c1c7207e22e93b7a23d70aa7da2217ef440f634ce060a8a02/diff:/var/lib/docker/overlay2/99a7aef9046f56137875317e0f56af328660993396a2c9fe887abea93aff424c/diff:/var/lib/docker/overlay2/66fe64d48054a151e258dfaf13c9a1080153e4c4c80a958b2515bdb6b225132d/diff:/var/lib/docker/overlay2/3d1d7eb72ab13a5876da8cc14b68b20f1fb57194c7f09c2c41662d09beda5e0d/diff:/var/lib/docker/overlay2/a3d6da37fc1a80bcdf27b467ab53fbd78923ca49c0a86db9c9a643ce471d792f/diff",
"MergedDir": "/var/lib/docker/overlay2/5b3abcc503b0990fa0049f4c66fd8ca2fb6b979e95300bac44221c49a85aeb18/merged",
"UpperDir": "/var/lib/docker/overlay2/5b3abcc503b0990fa0049f4c66fd8ca2fb6b979e95300bac44221c49a85aeb18/diff",
"WorkDir": "/var/lib/docker/overlay2/5b3abcc503b0990fa0049f4c66fd8ca2fb6b979e95300bac44221c49a85aeb18/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:335fc45cf5e8eaa6d5b19a54b16db34311ce0d7a068eb2a9222eab4ddd3c216d",
"sha256:a72d33b56458b51f40b918728452ab74c1317fdaf8bc9ab6df4f50fa5ee4f61f",
"sha256:39de172b3a6facf83b405a1b01269bc427de7510360b599348f98238c0d04a2d",
"sha256:bd02fd546eaf1c69313d718fc5c1c2ad84ee0e64ad39251ca2393de1009831d2",
"sha256:4432c8c1c932ed2f917a1c4f0c77c57dbcfa4deaccde9d7fae93c0b49cc79111",
"sha256:d71266ab38db718735b696c1a2313c690819b5006591ba668ec3ac35ab5ad7dc",
"sha256:9a5aa00799f0adb6e560a001903aca94586f66f02d5e15f8aeded1ec7d6ca438",
"sha256:92f61da990d15f97f4d5acfa1de8a4fcbf555ac1dfa5c638a1513296468113db",
"sha256:4d36fd689a87ae4dd12cdda3aaedff3ad13e54a190051c7a9954520e6f8a5192",
"sha256:3ec0051780fbd0141bea2f95bc235f65d4506ae21897d2d6ce08f8aa990f70c7",
"sha256:78ab0c71a057071a57b7803dafe31ec0b2d109691624810c9faf918da22f9674",
"sha256:57e9e49f737ca42a3087205ddcceb72723196506c5151a7eb8f6039dce529415",
"sha256:7d5ea44cba7ddc1d58eac6bae30ae2664bac2c398d8ed28ccf7460614c9177b1",
"sha256:bc7ab7171c0c18863105ad12d67ffc3f8f12cbcb22f897f1f060ba219bc2278b",
"sha256:15af9654da02896efb2bdbcebe10a2f5ebd07621f27b448139c5767267540883",
"sha256:3d070ef61a9cc8857c5f0c2dce174aa8780e1fbf90b4c8600c4b59c3f6046f7a",
"sha256:74903d89751d2e324423856fff6bbd9b3b68fe162001e3401201fdb65d8c189b",
"sha256:5adac00568bc0f08c59a3cad5671f2dd09e42a7d914ebfeede480219ab839e84",
"sha256:4c7943b5c59d510e44ade704430804f8781abec992277567b98e371c8c380638",
"sha256:74e7c86b20cfc442bae500c2411bb936828760793d757b12ba72406910a314db",
"sha256:69f4fcca9db917d8f4527a7dfa842cd93ddb48126102d2b161e4f94ee73f1df4",
"sha256:f4ceefd73e5ec5e96df17cf406244ded0c1e2e0944f59c430a1f5c09d67cd5f1",
"sha256:0bad81cc3a623612f69d188ffff2abbb8e335b60df8f80063eb5921366fa5837",
"sha256:be0d6db10c5497cacf27008f1126a7fa8658cc0f0a997d6b5f46467e36069ed8",
"sha256:919783e6a02b004e8fb194b07d2cbd1ccfc81b7bf7411e4458526ec0354b918c",
"sha256:aa22ec060701b98b4acf4d80f9167988cd5b93f67c94f89e0b149cc599b4a0e2",
"sha256:e7bfdcc583cf6c7ce777877c479d4ab012af35016a2f4262534345d089d06844",
"sha256:fdc48b0a17ce5edf7a5c3132f7edb21b06dcb18e15cde31057d4cd287513a392",
"sha256:4b49f24078220bc14985f34de0be334c7b9caaeee811a9608aa2a2b1f344f6a6",
"sha256:2d6ff8aa4d9f8a0423fb8423fe954fc6b2bc7ccf3720479a215ade1379e6fee6",
"sha256:87826affb976b1f560b58ddd78e22ceb3fe0f8c43369439ffe8a44833a410fbf",
"sha256:7e5e4a1c732c67bfb85e449fb3c0404618eca99ebae3683c7b67a8466a0b9377",
"sha256:24f59fabd882790c465b16b7d2ecfdf9a09c9ab3f02758b8fe6a5a0f1871c112",
"sha256:a906228f64c7e8994339eb3e65cff7fad5027ef6160e33495d005cec2d9b5674",
"sha256:0b873e4c7b59bcb6bde7805e07135c4ca36288d9c779f3f1407511cafb936419",
"sha256:b04911b525fcb02828b4b1d31b1ee5c4858e198b6c5cc95beb4745fb1d964364",
"sha256:ed8cd593e83abd621650168aee55a3a0e0072e0d920285e038cd5450c9174de5",
"sha256:8995f5f0146e1558de3e5283a138b6a541ce5a15b9c07108493a7fd6f42b9f5e",
"sha256:1cf218e50d39a1ae3104a8b6c685f16e5350d40a2805d5a00a49d85c12b0e557",
"sha256:d65c1896a25ffb1106bc5e8456a6bd0efd88d88a7c058dd00cb5a3bdc66c6575",
"sha256:e9889edab0adff05a824916e919db99d96bd9a28bed0c7f06bdeba83f3360c31",
"sha256:bd8daace8c22899c1031208356360de13dead5aec0e0b2d572386ced991eb28c",
"sha256:69b845e6f2933a5a937baadf601ca2c666b1f26f1f02c1498642be062f22ef2c",
"sha256:385142665dd9fb9f3a4d47aeb202dc864fb95bf808cfa8d302beaac9181bfbbe",
"sha256:d474fd2815e4ec26f910cbc7a1f4680bd7a602b2a2dc77512db6afd438e0025f",
"sha256:f172e3c39a4ffcd010e3120f7178b0ef131a0ed13cf774de42db40447a72d949",
"sha256:de019bb9813975cefbc4fe640f35b24066fb8170825ea12da1aedf093a7f399f",
"sha256:d8fc5cb5eaba75a9edd94a5a716cd150117ff98371f150b749f37a74d83af685",
"sha256:d7b6bfbc31f6d2c04252a3f30b8a61a125d6928d722767c441e4ef7c129fe09d",
"sha256:e4e35aacbdf2efb9564867782664e5086e444e9ed548996f28c9702a60bc7887",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
]
},
"Metadata": {
"LastTagTime": "2026-05-20T00:15:23.360117536+08:00"
}
}