镜像构建历史
# 2026-10-06 08:58:15 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["tini" "--" "/opt/agent-canvas/entrypoint.sh"]
# 2026-10-06 08:58:15 0.00B 声明容器运行时监听的端口
EXPOSE map[8000/tcp:{}]
# 2026-10-06 08:58:15 0.00B 创建挂载点用于持久化数据或共享数据
VOLUME [/home/openhands/.openhands /projects]
# 2026-10-06 08:58:15 0.00B 指定运行容器时使用的用户
USER openhands
# 2026-10-06 08:58:15 0.00B 执行命令并创建新的镜像层
RUN |9 AUTOMATION_VERSION=1.19.0 AGENT_SERVER_VERSION=1.53.0 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=50c68a12c9bd92faf16db8c29681190f467ca726 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.25.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.25.0 DEBIAN_SNAPSHOT=20260913T000000Z /bin/sh -c mkdir -p /home/openhands/.openhands/agent-canvas/conversations /home/openhands/.openhands/agent-canvas/bash_events /home/openhands/.openhands/automation /projects && chown -R openhands:openhands /home/openhands/.openhands /projects # buildkit
# 2026-10-06 08:58:15 26.18KB 执行命令并创建新的镜像层
RUN |9 AUTOMATION_VERSION=1.19.0 AGENT_SERVER_VERSION=1.53.0 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=50c68a12c9bd92faf16db8c29681190f467ca726 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.25.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.25.0 DEBIAN_SNAPSHOT=20260913T000000Z /bin/sh -c chmod +x /opt/agent-canvas/entrypoint.sh # buildkit
# 2026-10-06 08:58:15 26.18KB 复制新文件或目录到容器中
COPY docker/entrypoint.sh /opt/agent-canvas/entrypoint.sh # buildkit
# 2026-10-06 08:58:15 460.00B 复制新文件或目录到容器中
COPY /tmp/defaults.env /opt/agent-canvas/defaults.env # buildkit
# 2026-10-06 08:58:14 6.49KB 复制新文件或目录到容器中
COPY tools/ /opt/agent-canvas/tools/ # buildkit
# 2026-10-06 08:58:14 8.56KB 复制新文件或目录到容器中
COPY scripts/runtime-services-info.mjs /opt/agent-canvas/runtime-services-info.mjs # buildkit
# 2026-10-06 08:58:14 7.46KB 复制新文件或目录到容器中
COPY /build/node_modules/totalist /opt/agent-canvas/node_modules/totalist # buildkit
# 2026-10-06 08:58:14 33.01KB 复制新文件或目录到容器中
COPY /build/node_modules/mrmime /opt/agent-canvas/node_modules/mrmime # buildkit
# 2026-10-06 08:58:14 4.82KB 复制新文件或目录到容器中
COPY /build/node_modules/@polka /opt/agent-canvas/node_modules/@polka # buildkit
# 2026-10-06 08:58:14 21.88KB 复制新文件或目录到容器中
COPY /build/node_modules/sirv /opt/agent-canvas/node_modules/sirv # buildkit
# 2026-10-06 08:58:14 60.93KB 复制新文件或目录到容器中
COPY /build/node_modules/httpxy /opt/agent-canvas/node_modules/httpxy # buildkit
# 2026-10-06 08:58:14 8.60KB 复制新文件或目录到容器中
COPY scripts/proxy-utils.mjs /opt/agent-canvas/proxy-utils.mjs # buildkit
# 2026-10-06 08:58:14 2.45KB 复制新文件或目录到容器中
COPY scripts/bind-host.mjs /opt/agent-canvas/bind-host.mjs # buildkit
# 2026-10-06 08:58:14 28.81KB 复制新文件或目录到容器中
COPY scripts/static-server.mjs /opt/agent-canvas/static-server.mjs # buildkit
# 2026-10-06 08:58:14 9.58MB 复制新文件或目录到容器中
COPY /build/build /opt/agent-canvas/frontend # buildkit
# 2026-10-06 08:58:01 0.00B 执行命令并创建新的镜像层
RUN |9 AUTOMATION_VERSION=1.19.0 AGENT_SERVER_VERSION=1.53.0 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=50c68a12c9bd92faf16db8c29681190f467ca726 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.25.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.25.0 DEBIAN_SNAPSHOT=20260913T000000Z /bin/sh -c if [ -n "${AGENT_SERVER_SDK_GIT_REF}" ]; then BASE_GIT_URL="git+https://github.com/OpenHands/software-agent-sdk@${AGENT_SERVER_SDK_GIT_REF}" && uv pip install --system --force-reinstall "${BASE_GIT_URL}#subdirectory=openhands-sdk" "${BASE_GIT_URL}#subdirectory=openhands-tools" "${BASE_GIT_URL}#subdirectory=openhands-workspace"; fi # buildkit
# 2026-10-06 08:58:01 565.97MB 执行命令并创建新的镜像层
RUN |9 AUTOMATION_VERSION=1.19.0 AGENT_SERVER_VERSION=1.53.0 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=50c68a12c9bd92faf16db8c29681190f467ca726 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.25.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.25.0 DEBIAN_SNAPSHOT=20260913T000000Z /bin/sh -c uv pip install --system "openhands-automation==${AUTOMATION_VERSION}" "openhands-tools==${AGENT_SERVER_VERSION}" 2>/dev/null || pip install --no-cache-dir "openhands-automation==${AUTOMATION_VERSION}" "openhands-tools==${AGENT_SERVER_VERSION}" # buildkit
# 2026-10-06 08:57:54 18.03MB 执行命令并创建新的镜像层
RUN |9 AUTOMATION_VERSION=1.19.0 AGENT_SERVER_VERSION=1.53.0 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=50c68a12c9bd92faf16db8c29681190f467ca726 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.25.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.25.0 DEBIAN_SNAPSHOT=20260913T000000Z /bin/sh -c if command -v apt-get >/dev/null 2>&1; then printf '%s\n' 'Types: deb' "URIs: http://snapshot.debian.org/archive/debian/${DEBIAN_SNAPSHOT}/" 'Suites: trixie' 'Components: main' 'Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg' 'Check-Valid-Until: no' '' 'Types: deb' "URIs: http://snapshot.debian.org/archive/debian-security/${DEBIAN_SNAPSHOT}/" 'Suites: trixie-security' 'Components: main' 'Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg' 'Check-Valid-Until: no' > /etc/apt/sources.list.d/debian.sources && apt-get update && apt-get install -y --no-install-recommends libpq-dev && apt-get upgrade -y --no-install-recommends && rm -rf /var/lib/apt/lists/*; fi # buildkit
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG DEBIAN_SNAPSHOT=20260913T000000Z
# 2026-10-06 08:57:54 0.00B 指定运行容器时使用的用户
USER root
# 2026-10-06 08:57:54 0.00B 设置环境变量 VITE_POSTHOG_API_KEY
ENV VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK
# 2026-10-06 08:57:54 0.00B 设置环境变量 AGENT_CANVAS_BASE_PATH
ENV AGENT_CANVAS_BASE_PATH=/canvas
# 2026-10-06 08:57:54 0.00B 设置环境变量 AGENT_CANVAS_BUILD_GIT_REF
ENV AGENT_CANVAS_BUILD_GIT_REF=refs/tags/v1.25.0
# 2026-10-06 08:57:54 0.00B 设置环境变量 AGENT_CANVAS_BUILD_GIT_SHA
ENV AGENT_CANVAS_BUILD_GIT_SHA=50c68a12c9bd92faf16db8c29681190f467ca726
# 2026-10-06 08:57:54 0.00B 添加元数据标签
LABEL org.opencontainers.image.revision=50c68a12c9bd92faf16db8c29681190f467ca726
# 2026-10-06 08:57:54 0.00B 添加元数据标签
LABEL org.opencontainers.image.version=1.25.0
# 2026-10-06 08:57:54 0.00B 添加元数据标签
LABEL org.opencontainers.image.source=https://github.com/OpenHands/OpenHands
# 2026-10-06 08:57:54 0.00B 添加元数据标签
LABEL org.opencontainers.image.description=All-in-one agent-canvas: Agent Server + Automation + Frontend
# 2026-10-06 08:57:54 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=agent-canvas
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG AGENT_CANVAS_VERSION=dev
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG VITE_POSTHOG_API_KEY=
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG VITE_BASE_PATH=/canvas
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_REF=unknown
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_SHA=unknown
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG AGENT_SERVER_SDK_GIT_REF=
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG AGENT_SERVER_VERSION
# 2026-10-06 08:57:54 0.00B 定义构建参数
ARG AUTOMATION_VERSION
# 2026-10-05 21:23:54 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["tini" "--" "/usr/local/bin/openhands-agent-server"]
# 2026-10-05 21:23:54 0.00B 设置环境变量 LD_LIBRARY_PATH
ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:/usr/lib:/usr/lib/x86_64-linux-gnu:
# 2026-10-05 21:23:54 0.00B 执行命令并创建新的镜像层
RUN |1 USERNAME=openhands /bin/sh -c chmod +x /usr/local/bin/openhands-agent-server # buildkit
# 2026-10-05 21:23:53 113.32MB 复制新文件或目录到容器中
COPY --chown=openhands:openhands /agent-server/dist/openhands-agent-server /usr/local/bin/openhands-agent-server # buildkit
# 2026-10-05 21:21:37 0.00B 定义构建参数
ARG USERNAME
# 2026-10-05 21:21:37 0.00B 声明容器运行时监听的端口
EXPOSE map[8000/tcp:{}]
# 2026-10-05 21:21:37 0.00B 设置环境变量 OH_ACP_SKILL_SOURCING
ENV OH_ACP_SKILL_SOURCING=openhands_managed
# 2026-10-05 21:21:37 0.00B 设置环境变量 LOG_JSON
ENV LOG_JSON=true
# 2026-10-05 21:21:37 0.00B 设置工作目录为/
WORKDIR /
# 2026-10-05 21:21:37 0.00B 指定运行容器时使用的用户
USER openhands
# 2026-10-05 21:21:37 685.60MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.109.5 RELEASE_ORG=gitpod-io /bin/sh -c set -eux; case ",$INSTALL_CAPABILITIES," in *,browser,*) apt-get update; apt-get install -y --no-install-recommends "$(if grep -q "ubuntu" /etc/os-release; then echo "chromium-browser"; else echo "chromium"; fi)"; apt-get clean; rm -rf /var/lib/apt/lists/*; ;; esac # buildkit
# 2026-10-05 21:21:15 0.00B 设置环境变量 CHROME_BIN PUPPETEER_EXECUTABLE_PATH CHROMIUM_FLAGS
ENV CHROME_BIN=/usr/bin/chromium PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium CHROMIUM_FLAGS=--no-sandbox --disable-dev-shm-usage --disable-gpu
# 2026-10-05 21:21:15 42.79MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.109.5 RELEASE_ORG=gitpod-io /bin/sh -c set -eux; mkdir -p -m 755 /etc/apt/keyrings; wget -nv -O /etc/apt/keyrings/githubcli-archive-keyring.gpg https://cli.github.com/packages/githubcli-archive-keyring.gpg; chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg; echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/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; apt-get clean; rm -rf /var/lib/apt/lists/* # buildkit
# 2026-10-05 21:21:12 409.84MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.109.5 RELEASE_ORG=gitpod-io /bin/sh -c set -eux; case ",$INSTALL_CAPABILITIES," in *,docker,*) ;; *) echo "INSTALL_CAPABILITIES excludes docker; skipping Docker Engine"; exit 0;; esac; if grep -q "ubuntu" /etc/os-release; then install -m 0755 -d /etc/apt/keyrings; curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc; chmod a+r /etc/apt/keyrings/docker.asc; echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null; else install -m 0755 -d /etc/apt/keyrings; curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc; chmod a+r /etc/apt/keyrings/docker.asc; echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null; fi; apt-get update; apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; apt-get clean; rm -rf /var/lib/apt/lists/*; mkdir -p /etc/docker; echo '{"mtu": 1450}' > /etc/docker/daemon.json # buildkit
# 2026-10-05 21:21:01 1.15KB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.109.5 RELEASE_ORG=gitpod-io /bin/sh -c set -eux; case ",$INSTALL_CAPABILITIES," in *,vscode,*) ;; *) exit 0;; esac; mkdir -p ${OPENVSCODE_SERVER_ROOT}/extensions; cp -r /tmp/vscode_extensions/. ${OPENVSCODE_SERVER_ROOT}/extensions/; chown -R ${USERNAME}:${USERNAME} ${OPENVSCODE_SERVER_ROOT}/extensions # buildkit
# 2026-10-05 21:21:00 243.76MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.109.5 RELEASE_ORG=gitpod-io /bin/sh -c set -eux; case ",$INSTALL_CAPABILITIES," in *,vscode,*) ;; *) echo "INSTALL_CAPABILITIES excludes vscode; skipping OpenVSCode Server"; exit 0;; esac; mkdir -p $(dirname ${OPENVSCODE_SERVER_ROOT}); arch=$(uname -m); if [ "${arch}" = "x86_64" ]; then arch="x64"; elif [ "${arch}" = "aarch64" ]; then arch="arm64"; elif [ "${arch}" = "armv7l" ]; then arch="armhf"; fi; wget https://github.com/${RELEASE_ORG}/openvscode-server/releases/download/${RELEASE_TAG}/${RELEASE_TAG}-linux-${arch}.tar.gz; tar -xzf ${RELEASE_TAG}-linux-${arch}.tar.gz; if [ -d "${OPENVSCODE_SERVER_ROOT}" ]; then rm -rf "${OPENVSCODE_SERVER_ROOT}"; fi; mv ${RELEASE_TAG}-linux-${arch} ${OPENVSCODE_SERVER_ROOT}; cp ${OPENVSCODE_SERVER_ROOT}/bin/remote-cli/openvscode-server ${OPENVSCODE_SERVER_ROOT}/bin/remote-cli/code; rm -f ${RELEASE_TAG}-linux-${arch}.tar.gz; chown -R ${USERNAME}:${USERNAME} ${OPENVSCODE_SERVER_ROOT} # buildkit
# 2026-10-05 21:20:56 0.00B 定义构建参数
ARG RELEASE_ORG=gitpod-io
# 2026-10-05 21:20:56 0.00B 定义构建参数
ARG RELEASE_TAG=openvscode-server-v1.109.5
# 2026-10-05 21:20:56 0.00B 设置环境变量 EDITOR VISUAL GIT_EDITOR OPENVSCODE_SERVER_ROOT
ENV EDITOR=code VISUAL=code GIT_EDITOR=code --wait OPENVSCODE_SERVER_ROOT=/openhands/.openvscode-server
# 2026-10-05 21:20:56 0.00B 执行命令并创建新的镜像层
RUN |2 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker /bin/sh -c set -eux; for capability in $(echo "$INSTALL_CAPABILITIES" | tr ',' ' '); do case "$capability" in vscode|browser|docker) ;; *) echo "Unknown capability '$capability' in INSTALL_CAPABILITIES" "(expected one of: vscode, browser, docker)" >&2; exit 1;; esac; done # buildkit
# 2026-10-05 21:20:56 55.19MB 复制新文件或目录到容器中
COPY /uv /uvx /bin/ # buildkit
# 2026-10-05 21:20:56 270.81MB 执行命令并创建新的镜像层
RUN |2 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker /bin/sh -c set -eux; if command -v apt-get >/dev/null 2>&1; then apt-get -o Acquire::Retries=5 update; apt-get -o Acquire::Retries=5 install -y --no-install-recommends apt-transport-https apt-utils build-essential coreutils curl findutils gnupg grep jq lsb-release procps sed sudo tar util-linux wget xz-utils; rm -rf /var/lib/apt/lists/*; elif command -v apk >/dev/null 2>&1; then apk add --no-cache build-base coreutils curl findutils gnupg grep jq procps sudo tar util-linux wget xz; elif command -v microdnf >/dev/null 2>&1; then microdnf install -y coreutils curl findutils gcc gcc-c++ gnupg2 grep jq make procps-ng sed sudo tar util-linux wget xz; microdnf clean all; elif command -v dnf >/dev/null 2>&1; then dnf install -y coreutils curl findutils gcc gcc-c++ gnupg2 grep jq make procps-ng sed sudo tar util-linux wget xz; dnf clean all; elif command -v yum >/dev/null 2>&1; then yum install -y coreutils curl findutils gcc gcc-c++ gnupg2 grep jq make procps-ng sed sudo tar util-linux wget xz; yum clean all; elif command -v zypper >/dev/null 2>&1; then zypper --non-interactive install --no-recommends coreutils curl findutils gcc gcc-c++ gpg2 grep jq make procps sed sudo tar util-linux wget xz; zypper clean --all; fi; usermod -aG sudo "${USERNAME}" 2>/dev/null || true; echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers # buildkit
# 2026-10-05 21:20:43 0.00B 指定运行容器时使用的用户
USER root
# 2026-10-05 21:20:43 0.00B 定义构建参数
ARG INSTALL_CAPABILITIES
# 2026-10-05 21:20:43 0.00B 定义构建参数
ARG USERNAME
# 2026-10-05 21:20:43 0.00B 声明容器运行时监听的端口
EXPOSE map[8000/tcp:{}]
# 2026-10-05 21:20:43 0.00B 设置环境变量 OH_ACP_SKILL_SOURCING
ENV OH_ACP_SKILL_SOURCING=openhands_managed
# 2026-10-05 21:20:43 0.00B 设置环境变量 LOG_JSON
ENV LOG_JSON=true
# 2026-10-05 21:20:43 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-10-05 21:20:43 0.00B 设置环境变量 LC_ALL
ENV LC_ALL=C.UTF-8
# 2026-10-05 21:20:43 0.00B 设置工作目录为/
WORKDIR /
# 2026-10-05 21:20:43 0.00B 指定运行容器时使用的用户
USER openhands
# 2026-10-05 21:20:43 49.00B 执行命令并创建新的镜像层
RUN |6 USERNAME=openhands UID=10001 GID=10001 PORT=8000 OPENHANDS_BUILD_GIT_SHA=54daf056bd863bb46f922a2fe9324dd736b37ff6 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.53.0 /bin/sh -c mkdir -p /etc/claude-code && echo '{"permissions":{"allow":["Edit","Read","Bash"]}}' > /etc/claude-code/managed-settings.json # buildkit
# 2026-10-05 21:20:43 0.00B 执行命令并创建新的镜像层
RUN |6 USERNAME=openhands UID=10001 GID=10001 PORT=8000 OPENHANDS_BUILD_GIT_SHA=54daf056bd863bb46f922a2fe9324dd736b37ff6 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.53.0 /bin/sh -c if ! "$ACP_NODE_DIR/bin/node" --version >/dev/null 2>&1; then echo "Warning: ACP Node 22 runtime is not compatible with this base image (likely older glibc or musl libc); ACP agents will not be available" >&2; if [ -f "$ACP_NODE_DIR/acp-wrappers.txt" ]; then while read -r bin; do rm -f "/usr/local/bin/$bin"; done < "$ACP_NODE_DIR/acp-wrappers.txt"; fi; rm -rf "$ACP_NODE_DIR"/*; fi # buildkit
# 2026-10-05 21:20:43 223.00B 复制新文件或目录到容器中
COPY /opt/acp-wrappers/. /usr/local/bin/ # buildkit
# 2026-10-05 21:20:43 1.02GB 复制新文件或目录到容器中
COPY /acp-node /acp-node # buildkit
# 2026-10-05 21:20:24 0.00B 设置环境变量 ACP_NODE_DIR
ENV ACP_NODE_DIR=/acp-node
# 2026-10-05 21:20:24 101.27MB 执行命令并创建新的镜像层
RUN |6 USERNAME=openhands UID=10001 GID=10001 PORT=8000 OPENHANDS_BUILD_GIT_SHA=54daf056bd863bb46f922a2fe9324dd736b37ff6 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.53.0 /bin/sh -c set -eux; if command -v apt-get >/dev/null 2>&1; then apt-get -o Acquire::Retries=5 update; apt-get -o Acquire::Retries=5 install -y --no-install-recommends bash ca-certificates git tini tmux; rm -rf /var/lib/apt/lists/*; elif command -v apk >/dev/null 2>&1; then apk add --no-cache bash ca-certificates git shadow tini tmux; elif command -v microdnf >/dev/null 2>&1; then microdnf install -y bash ca-certificates curl git shadow-utils tmux; microdnf clean all; elif command -v dnf >/dev/null 2>&1; then dnf install -y bash ca-certificates curl git shadow-utils tmux; dnf clean all; elif command -v yum >/dev/null 2>&1; then yum install -y bash ca-certificates curl git shadow-utils tmux; yum clean all; elif command -v zypper >/dev/null 2>&1; then zypper --non-interactive install --no-recommends bash ca-certificates curl git shadow tmux; zypper clean --all; else echo "Unsupported base image: no known package manager found" >&2; exit 1; fi; if ! command -v tini >/dev/null 2>&1; then ARCH=$(uname -m); case "$ARCH" in x86_64|amd64) TARCH=amd64; TINI_SHA256=c5b0666b4cb676901f90dfcb37106783c5fe2077b04590973b885950611b30ee;; aarch64|arm64) TARCH=arm64; TINI_SHA256=eae1d3aa50c48fb23b8cbdf4e369d0910dfc538566bfd09df89a774aa84a48b9;; *) echo "Unsupported architecture for tini: '$ARCH'" >&2; exit 1;; esac; curl -fsSL --retry 5 --retry-delay 2 --retry-connrefused "https://github.com/krallin/tini/releases/download/v0.19.0/tini-static-${TARCH}" -o /usr/local/bin/tini; echo "$TINI_SHA256 /usr/local/bin/tini" | sha256sum -c -; chmod 755 /usr/local/bin/tini; fi; tini --version; grep -Eq "^[^:]*:[^:]*:${GID}:" /etc/group || groupadd -g "${GID}" "${USERNAME}"; grep -Eq "^${USERNAME}:" /etc/passwd || useradd -m -u "${UID}" -g "${GID}" -s /bin/bash "${USERNAME}"; mkdir -p /workspace/project; chown -R "${USERNAME}:${USERNAME}" /workspace # buildkit
# 2026-10-05 21:20:12 0.00B 设置环境变量 OPENHANDS_BUILD_GIT_REF
ENV OPENHANDS_BUILD_GIT_REF=refs/tags/v1.53.0
# 2026-10-05 21:20:12 0.00B 设置环境变量 OPENHANDS_BUILD_GIT_SHA
ENV OPENHANDS_BUILD_GIT_SHA=54daf056bd863bb46f922a2fe9324dd736b37ff6
# 2026-10-05 21:20:12 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_REF=unknown
# 2026-10-05 21:20:12 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_SHA=unknown
# 2026-10-05 21:20:12 0.00B 定义构建参数
ARG USERNAME UID GID PORT
# 2026-10-05 21:20:12 4.62MB 执行命令并创建新的镜像层
RUN |2 NPM_VERSION=11.19.1 DEBIAN_SNAPSHOT=20260920T000000Z /bin/sh -c set -eux; ln -sfn ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm; ln -sfn ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx; ln -sfn ../lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack; printf '%s\n' 'Types: deb' "URIs: http://snapshot.debian.org/archive/debian/${DEBIAN_SNAPSHOT}/" 'Suites: trixie' 'Components: main' 'Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg' 'Check-Valid-Until: no' '' 'Types: deb' "URIs: http://snapshot.debian.org/archive/debian-security/${DEBIAN_SNAPSHOT}/" 'Suites: trixie-security' 'Components: main' 'Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg' 'Check-Valid-Until: no' > /etc/apt/sources.list.d/debian.sources; apt-get update; apt-get upgrade -y; apt-get install -y --no-install-recommends ca-certificates libbz2-1.0 libdb5.3t64 libffi8 libgcc-s1 libgdbm6t64 liblzma5 libncursesw6 libreadline8t64 libsqlite3-0 libssl3t64 libstdc++6 libtinfo6 libuuid1 libzstd1 netbase tzdata zlib1g; rm -rf /var/lib/apt/lists/*; python3 --version; node --version; npm --version # buildkit
# 2026-10-05 21:19:58 44.89MB 执行命令并创建新的镜像层
RUN |2 NPM_VERSION=11.19.1 DEBIAN_SNAPSHOT=20260920T000000Z /bin/sh -c node /usr/local/lib/node_modules/npm/bin/npm-cli.js install --global "npm@${NPM_VERSION}" # buildkit
# 2026-10-05 21:19:51 12.79MB 复制新文件或目录到容器中
COPY /usr/local/lib/node_modules /usr/local/lib/node_modules # buildkit
# 2026-10-05 21:19:51 126.60MB 复制新文件或目录到容器中
COPY /usr/local/bin/node /usr/local/bin/node # buildkit
# 2026-10-05 21:19:50 32.36MB 复制新文件或目录到容器中
COPY /usr/local /usr/local # buildkit
# 2026-10-05 21:19:50 0.00B 定义构建参数
ARG DEBIAN_SNAPSHOT=20260920T000000Z
# 2026-10-05 21:19:50 0.00B 定义构建参数
ARG NPM_VERSION
# 2026-09-18 08:00:00 78.81MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1789689600'
镜像信息
{
"Id": "sha256:47dc89d90a7673a162ea0c699a2debb1608adf681647cfc40ee74360b404fcf4",
"RepoTags": [
"ghcr.io/openhands/agent-canvas:1.25.0",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/openhands/agent-canvas:1.25.0"
],
"RepoDigests": [
"ghcr.io/openhands/agent-canvas@sha256:10190cdede885f74853567f4aa44b33de094139a940df75f4b204a2b6df73c57",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/openhands/agent-canvas@sha256:9a3030a19d617f0c0f71c2c319d1c8769eabf46cb3f9dc15834e6acca9892b65"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-10-06T00:58:15.254070748Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "openhands",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8000/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"OPENHANDS_BUILD_GIT_SHA=54daf056bd863bb46f922a2fe9324dd736b37ff6",
"OPENHANDS_BUILD_GIT_REF=refs/tags/v1.53.0",
"ACP_NODE_DIR=/acp-node",
"LC_ALL=C.UTF-8",
"LANG=C.UTF-8",
"LOG_JSON=true",
"OH_ACP_SKILL_SOURCING=openhands_managed",
"EDITOR=code",
"VISUAL=code",
"GIT_EDITOR=code --wait",
"OPENVSCODE_SERVER_ROOT=/openhands/.openvscode-server",
"CHROME_BIN=/usr/bin/chromium",
"PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium",
"CHROMIUM_FLAGS=--no-sandbox --disable-dev-shm-usage --disable-gpu",
"LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:/usr/lib:/usr/lib/x86_64-linux-gnu:",
"AGENT_CANVAS_BUILD_GIT_SHA=50c68a12c9bd92faf16db8c29681190f467ca726",
"AGENT_CANVAS_BUILD_GIT_REF=refs/tags/v1.25.0",
"AGENT_CANVAS_BASE_PATH=/canvas",
"VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK"
],
"Cmd": null,
"Image": "",
"Volumes": {
"/home/openhands/.openhands": {},
"/projects": {}
},
"WorkingDir": "/",
"Entrypoint": [
"tini",
"--",
"/opt/agent-canvas/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"org.opencontainers.image.description": "All-in-one agent-canvas: Agent Server + Automation + Frontend",
"org.opencontainers.image.revision": "50c68a12c9bd92faf16db8c29681190f467ca726",
"org.opencontainers.image.source": "https://github.com/OpenHands/OpenHands",
"org.opencontainers.image.title": "agent-canvas",
"org.opencontainers.image.version": "1.25.0"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 3839857700,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/07b7f6fdbeee0d36acc34cb6e6a017f9e936246175bc6fb5b279c5b5697c5985/diff:/var/lib/docker/overlay2/a6312b2bda6174fae1e5704fb74cb1370656f2449b7e992c85884e8fc8da7f40/diff:/var/lib/docker/overlay2/84d8909ce5d5e9277192f02de135e55f3b256499946cc3b11b8e1f766a45cfcc/diff:/var/lib/docker/overlay2/db972e34f99437518e6b29c85712b5bdce445bc5b05c74c7f19d7bf7af148561/diff:/var/lib/docker/overlay2/6e88e3b2913a4fb7ce7641808c4b0427a65bb0a5cd8e4f8a1837b45171fac24c/diff:/var/lib/docker/overlay2/e0eacaeeea74a3b4342e6f98c6cdc736e3986556d24afb1f13a0c4e825b816f1/diff:/var/lib/docker/overlay2/1f2bc8ae98f58bebc70faec7474ec9a859b45ef20c6e09c520aee48bfedad4d1/diff:/var/lib/docker/overlay2/6649327c2d12b50329103c6ecba5c5b40f522191cf823df587dc4f6319e95f54/diff:/var/lib/docker/overlay2/20951cbb3cd6df413f931af66f36272fe27de94cc02028beafbade32a3d40de3/diff:/var/lib/docker/overlay2/f76c56d0748aaa790bf17b4198bec5fa12c38983f1e5f465174f761a5060d688/diff:/var/lib/docker/overlay2/a07cfd27286384e74ada0dcfd753349f032d2990813efa2f7c9d9ba413c7303b/diff:/var/lib/docker/overlay2/689cb096066f27ee4efedf093007c572e7c06d7dbad424dccee702442ec04b92/diff:/var/lib/docker/overlay2/3576d5860f1bcbf2122a4d407aae7c829978240e236d5e7230a4ad3b2cd13a28/diff:/var/lib/docker/overlay2/5e639a8470f36227e04c193565a8b139ecc09a00b7d9c12db4d986507f793696/diff:/var/lib/docker/overlay2/ec4c799b38578ca5d26e5735ce1eb93e344d9186db78117cf473ccde43fd66c2/diff:/var/lib/docker/overlay2/7a7df1c14071735d4ae0de396732f89f503da2c1b22cb16bb00ffe889738b181/diff:/var/lib/docker/overlay2/76e341e74da0979128c2d71b74e480914cd0effae89c04ef6d973563eb78a2a0/diff:/var/lib/docker/overlay2/a353a9da78bc97d01b92613026b61d2cc1dc9426d3b9098cd20e01df5202cbc2/diff:/var/lib/docker/overlay2/5f953208fe53ede52ec35abf95ba2ba71ef9e94f639bf65ccbeb9a9d7b9da05d/diff:/var/lib/docker/overlay2/9c79bb59d2e8e0f5244e1ed9888e34a43fb491e947a6e7d95148b1e71cba71bf/diff:/var/lib/docker/overlay2/be6c18ca6c70182fa6cc51ca29d393f6f253d71258fe5b0c60c9a8d75de3f5f9/diff:/var/lib/docker/overlay2/424ebabb60a70ed9e6b40176fb02d66db04bfcd4b41c940290874db8c5a3b44a/diff:/var/lib/docker/overlay2/226b7dc96a747b8b773408304100a66ba2810d8471831ff578f5ae11544e6393/diff:/var/lib/docker/overlay2/4d1fe89c6cecde90b37c1627fbe7e15fed7e15d27d192f09d0d4667fa236c673/diff:/var/lib/docker/overlay2/930dbe9a8b1e7e49060f6e9358727cf5bbcd922aaa9711dc7e71e60ab4a396fa/diff:/var/lib/docker/overlay2/2d1eb6039761a056552fd540eeeaf530af6336265b744fa4bd915edc543c3e85/diff:/var/lib/docker/overlay2/2f7a0ce898505ac038e932b764be1cd8fee0f25e65862860169b3f71feff269d/diff:/var/lib/docker/overlay2/7158e1e65f9f431a3f8163970c909dcebb67018608f1b39bd46120a6eabc6a39/diff:/var/lib/docker/overlay2/26a95e5fa9de2829e74eadb8be62539aa7bf648e7f5567f48de360ea66d74ba4/diff:/var/lib/docker/overlay2/c483900dcf84b7f9e7427bfdaaf088b150d6c93fd4a171064fbed6ff7b943b5d/diff:/var/lib/docker/overlay2/0fc1b26574c52d8414f8648e01b462ef068fdab2839adbdc34729643046a0765/diff:/var/lib/docker/overlay2/83b32464b7eb79d8d00752c2dd84f13632ad79c19d491ab9290aee7a5c8edb75/diff:/var/lib/docker/overlay2/b9dd8af25b55dd56891fafc3cc93a8bc36b35a8baf8609fa49eef5b4a780af1a/diff:/var/lib/docker/overlay2/2fb7ce004496aa57887a4800fc8ba85a26512b20ec063469b9737274f4f31104/diff:/var/lib/docker/overlay2/287a88ff0199c9e7d43be856b4cdfdbb3d3c77c119f352f2a6b56e28b5fabd12/diff:/var/lib/docker/overlay2/3129928f521fbbc1ebf42a71bc761516acad2cb65cd9a9d20baf5abea70c1793/diff:/var/lib/docker/overlay2/9c31b11eacb9d263bf52b7d9c0b68071ce92668f3425b2cef27bb5aae35a3b31/diff:/var/lib/docker/overlay2/0a54ab216a0bfe377756c5ffaeb38009fe74e9c0fd29729892c12e08f9ef4057/diff",
"MergedDir": "/var/lib/docker/overlay2/31a3a086c62af0fcceb0d0c0c37ea1327f6b44caca496275c6b0c91cec7391ec/merged",
"UpperDir": "/var/lib/docker/overlay2/31a3a086c62af0fcceb0d0c0c37ea1327f6b44caca496275c6b0c91cec7391ec/diff",
"WorkDir": "/var/lib/docker/overlay2/31a3a086c62af0fcceb0d0c0c37ea1327f6b44caca496275c6b0c91cec7391ec/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:a6dc765193a52cbaede3c93a9ff48b9540948dd0774bbe7031fcb5847606f9ac",
"sha256:93599266bc4cb5605791a51a366d84285ddb00d5b8953f83729830903d6fefa5",
"sha256:d36a1fbc06fe676e2d9d4a4a899f4516b75fc44727aa376d32e564c9a0f6a6de",
"sha256:9edf5b5130f3ebd38e6372b773db28b671862c3324141c3d2172294510f11fef",
"sha256:abbb52709ba85bd440e243236626b3a5d6bb1d4fbf9ed6bb5dfe511f9b25f9be",
"sha256:20db8c3c69b0438bcc12c5743be0ba04117ed9183898f09e974e2192514c886b",
"sha256:6e58461bd228765cbf845d9e522a53d879acc65dfde59dca4ef2832bc7881256",
"sha256:0ac065bf4e08377ade3959dde628beac68da74be56507331d8f84c63ad0f8789",
"sha256:e83a839a1ea2d311b9b452d4bba3f9eff26088f65787e0cdeeb85f2ced1126b5",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:07e361610d5c4d2de6f113c622449712e499784758699f5f76dc125786b310a1",
"sha256:35d91e33406034dc6796ec9ade3a1bbd57bbd547264ffa8cb5f5daba26039c18",
"sha256:1ff172939ab9e273e3102452c66d44c2947cc9234f6e16ecd928a545242ef403",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:c6ba6ebd8e68b34dd8b82ebf16811ed1da2690f5eaffac50f129c11e00ed15f6",
"sha256:b48e116293199bba33d05c287a06ac04b84c8b7eef6668bdf78181b0a8b74a9f",
"sha256:18f64bbe525cf9d493d22205554b2f3d677c3693da0e2d39d802127f61280cca",
"sha256:64565a18289e4ef7f0c0fe354a1df114ff1376004c89db16564396e907d68e7f",
"sha256:c7e260c965640689d677f7c6851261cfce1ae8052dbda2cff8e812da78bb81a9",
"sha256:52e8ce769b6dee41ee421834036dba2d3ef2d5f74bf3e14de9382a80696c3bf0",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:9c7d60b33c61d189d26f44698002f637bbd76e2567ff9974f3b1e01a1b96c383",
"sha256:3b27cf7b7839a6347f359e78c843ab117054c04536e6d3e57eade8857916b1a8",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:b94b96782fdea39bfebd04d9683de9e770bb3376eff5c815b0bcd7831bae6613",
"sha256:b92f1fdddca024400fa80eaa711eb6081a7812d0df95f12ff2cfc18815731b7d",
"sha256:6170f4c9d16dd7daf071527a3d75f6a52377217fe79f4bc3bfdece23113658a6",
"sha256:ad55ea326f8330888ea735263de014cc67ad1400169c871d8e3bbee302d3e56f",
"sha256:56bd309e47db99f7d89f09fb2c6606219c6fe4c5af3db4d4c350f88c1eb632eb",
"sha256:b7b31e7f194910a5c653a59d9fe86971770bffc70cdbb5f35676dd20461f6bbd",
"sha256:5d85ff48c6c2220b90cae48ab6fc93702a3fa6fdfcdb65f437c53c548a19752d",
"sha256:973d566cd2b89654ab288ea770699e55995b65abae2a14546af67206024affe1",
"sha256:fcf55e437707698c1131ace8009294fe24b486b0b059ee20871e1952b10844a4",
"sha256:9ebb6568d3490b87a6a1e3c932832a87d83a35713a3781997553eca992af56b2",
"sha256:bbf51406db453385668c14b0934b75282c0174aa88a193ad8ecae3c1ae566099",
"sha256:a6f29df6a2dc6253e41d4dec8efb6931144d23bc976a15a740a5458580990f42",
"sha256:028c5da0a6022bc5d202427d5600eda00cfd8f885943ad4dbf7e1de973b70429",
"sha256:c34953641b02d1761edb9cff1fc141dd7d52aff68686515edb3cfe2c1eb046d7",
"sha256:282ab16c08fe29d6635e597d73792394ad911190c47ab848467284d6edf10f59"
]
},
"Metadata": {
"LastTagTime": "2026-10-08T13:48:43.972235821+08:00"
}
}