镜像构建历史
# 2026-09-17 15:17:01 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["tini" "--" "/opt/agent-canvas/entrypoint.sh"]
# 2026-09-17 15:17:01 0.00B 声明容器运行时监听的端口
EXPOSE map[8000/tcp:{}]
# 2026-09-17 15:17:01 0.00B 创建挂载点用于持久化数据或共享数据
VOLUME [/home/openhands/.openhands /projects]
# 2026-09-17 15:17:01 0.00B 指定运行容器时使用的用户
USER openhands
# 2026-09-17 15:17:01 0.00B 执行命令并创建新的镜像层
RUN |8 AUTOMATION_VERSION=1.13.1 AGENT_SERVER_VERSION=1.49.1 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=9737f713616a1e452f822c2967f0e2c8bf2dc308 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.20.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.20.0 /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-09-17 15:17:00 25.10KB 执行命令并创建新的镜像层
RUN |8 AUTOMATION_VERSION=1.13.1 AGENT_SERVER_VERSION=1.49.1 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=9737f713616a1e452f822c2967f0e2c8bf2dc308 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.20.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.20.0 /bin/sh -c chmod +x /opt/agent-canvas/entrypoint.sh # buildkit
# 2026-09-17 15:17:00 25.10KB 复制新文件或目录到容器中
COPY docker/entrypoint.sh /opt/agent-canvas/entrypoint.sh # buildkit
# 2026-09-17 15:17:00 460.00B 复制新文件或目录到容器中
COPY /tmp/defaults.env /opt/agent-canvas/defaults.env # buildkit
# 2026-09-17 15:17:00 6.43KB 复制新文件或目录到容器中
COPY tools/ /opt/agent-canvas/tools/ # buildkit
# 2026-09-17 15:17:00 8.56KB 复制新文件或目录到容器中
COPY scripts/runtime-services-info.mjs /opt/agent-canvas/runtime-services-info.mjs # buildkit
# 2026-09-17 15:17:00 7.46KB 复制新文件或目录到容器中
COPY /build/node_modules/totalist /opt/agent-canvas/node_modules/totalist # buildkit
# 2026-09-17 15:17:00 33.01KB 复制新文件或目录到容器中
COPY /build/node_modules/mrmime /opt/agent-canvas/node_modules/mrmime # buildkit
# 2026-09-17 15:17:00 4.82KB 复制新文件或目录到容器中
COPY /build/node_modules/@polka /opt/agent-canvas/node_modules/@polka # buildkit
# 2026-09-17 15:17:00 21.88KB 复制新文件或目录到容器中
COPY /build/node_modules/sirv /opt/agent-canvas/node_modules/sirv # buildkit
# 2026-09-17 15:17:00 59.12KB 复制新文件或目录到容器中
COPY /build/node_modules/httpxy /opt/agent-canvas/node_modules/httpxy # buildkit
# 2026-09-17 15:17:00 8.60KB 复制新文件或目录到容器中
COPY scripts/proxy-utils.mjs /opt/agent-canvas/proxy-utils.mjs # buildkit
# 2026-09-17 15:17:00 28.37KB 复制新文件或目录到容器中
COPY scripts/static-server.mjs /opt/agent-canvas/static-server.mjs # buildkit
# 2026-09-17 15:17:00 8.88MB 复制新文件或目录到容器中
COPY /build/build /opt/agent-canvas/frontend # buildkit
# 2026-09-17 15:16:57 0.00B 执行命令并创建新的镜像层
RUN |8 AUTOMATION_VERSION=1.13.1 AGENT_SERVER_VERSION=1.49.1 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=9737f713616a1e452f822c2967f0e2c8bf2dc308 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.20.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.20.0 /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-09-17 15:16:57 568.45MB 执行命令并创建新的镜像层
RUN |8 AUTOMATION_VERSION=1.13.1 AGENT_SERVER_VERSION=1.49.1 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=9737f713616a1e452f822c2967f0e2c8bf2dc308 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.20.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.20.0 /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-09-17 15:16:41 18.06MB 执行命令并创建新的镜像层
RUN |8 AUTOMATION_VERSION=1.13.1 AGENT_SERVER_VERSION=1.49.1 AGENT_SERVER_SDK_GIT_REF= OPENHANDS_BUILD_GIT_SHA=9737f713616a1e452f822c2967f0e2c8bf2dc308 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.20.0 VITE_BASE_PATH=/canvas VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK AGENT_CANVAS_VERSION=1.20.0 /bin/sh -c if command -v apt-get >/dev/null 2>&1; then apt-get update && apt-get install -y --no-install-recommends libpq-dev && rm -rf /var/lib/apt/lists/*; fi # buildkit
# 2026-09-17 15:16:41 0.00B 指定运行容器时使用的用户
USER root
# 2026-09-17 15:16:41 0.00B 设置环境变量 VITE_POSTHOG_API_KEY
ENV VITE_POSTHOG_API_KEY=phc_BgzfxKdgsYMLFTmJqt424ZoyVHvKFfrwttLimzdYTKFK
# 2026-09-17 15:16:41 0.00B 设置环境变量 AGENT_CANVAS_BASE_PATH
ENV AGENT_CANVAS_BASE_PATH=/canvas
# 2026-09-17 15:16:41 0.00B 设置环境变量 AGENT_CANVAS_BUILD_GIT_REF
ENV AGENT_CANVAS_BUILD_GIT_REF=refs/tags/v1.20.0
# 2026-09-17 15:16:41 0.00B 设置环境变量 AGENT_CANVAS_BUILD_GIT_SHA
ENV AGENT_CANVAS_BUILD_GIT_SHA=9737f713616a1e452f822c2967f0e2c8bf2dc308
# 2026-09-17 15:16:41 0.00B 添加元数据标签
LABEL org.opencontainers.image.revision=9737f713616a1e452f822c2967f0e2c8bf2dc308
# 2026-09-17 15:16:41 0.00B 添加元数据标签
LABEL org.opencontainers.image.version=1.20.0
# 2026-09-17 15:16:41 0.00B 添加元数据标签
LABEL org.opencontainers.image.source=https://github.com/OpenHands/OpenHands
# 2026-09-17 15:16:41 0.00B 添加元数据标签
LABEL org.opencontainers.image.description=All-in-one agent-canvas: Agent Server + Automation + Frontend
# 2026-09-17 15:16:41 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=agent-canvas
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG AGENT_CANVAS_VERSION=dev
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG VITE_POSTHOG_API_KEY=
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG VITE_BASE_PATH=/canvas
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_REF=unknown
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_SHA=unknown
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG AGENT_SERVER_SDK_GIT_REF=
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG AGENT_SERVER_VERSION
# 2026-09-17 15:16:41 0.00B 定义构建参数
ARG AUTOMATION_VERSION
# 2026-09-17 12:40:40 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["tini" "--" "/usr/local/bin/openhands-agent-server"]
# 2026-09-17 12:40:40 0.00B 设置环境变量 LD_LIBRARY_PATH
ENV LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:/usr/lib:/usr/lib/x86_64-linux-gnu:
# 2026-09-17 12:40:40 0.00B 执行命令并创建新的镜像层
RUN |1 USERNAME=openhands /bin/sh -c chmod +x /usr/local/bin/openhands-agent-server # buildkit
# 2026-09-17 12:40:39 113.08MB 复制新文件或目录到容器中
COPY --chown=openhands:openhands /agent-server/dist/openhands-agent-server /usr/local/bin/openhands-agent-server # buildkit
# 2026-09-17 12:38:15 0.00B 定义构建参数
ARG USERNAME
# 2026-09-17 12:38:15 0.00B 声明容器运行时监听的端口
EXPOSE map[8000/tcp:{}]
# 2026-09-17 12:38:15 0.00B 设置环境变量 OH_ACP_SKILL_SOURCING
ENV OH_ACP_SKILL_SOURCING=openhands_managed
# 2026-09-17 12:38:15 0.00B 设置环境变量 LOG_JSON
ENV LOG_JSON=true
# 2026-09-17 12:38:15 0.00B 设置工作目录为/
WORKDIR /
# 2026-09-17 12:38:15 0.00B 指定运行容器时使用的用户
USER openhands
# 2026-09-17 12:38:15 681.86MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.98.2 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-09-17 12:37:54 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-09-17 12:37:54 42.70MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.98.2 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-09-17 12:37:51 408.11MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.98.2 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-09-17 12:37:40 1.15KB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.98.2 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-09-17 12:37:39 190.33MB 执行命令并创建新的镜像层
RUN |4 USERNAME=openhands INSTALL_CAPABILITIES=vscode,browser,docker RELEASE_TAG=openvscode-server-v1.98.2 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-09-17 12:37:37 0.00B 定义构建参数
ARG RELEASE_ORG=gitpod-io
# 2026-09-17 12:37:37 0.00B 定义构建参数
ARG RELEASE_TAG=openvscode-server-v1.98.2
# 2026-09-17 12:37:37 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-09-17 12:37:37 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-09-17 12:37:37 58.39MB 复制新文件或目录到容器中
COPY /uv /uvx /bin/ # buildkit
# 2026-09-17 12:37:37 270.83MB 执行命令并创建新的镜像层
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-09-17 12:37:23 0.00B 指定运行容器时使用的用户
USER root
# 2026-09-17 12:37:23 0.00B 定义构建参数
ARG INSTALL_CAPABILITIES
# 2026-09-17 12:37:23 0.00B 定义构建参数
ARG USERNAME
# 2026-09-17 12:37:23 0.00B 声明容器运行时监听的端口
EXPOSE map[8000/tcp:{}]
# 2026-09-17 12:37:23 0.00B 设置环境变量 OH_ACP_SKILL_SOURCING
ENV OH_ACP_SKILL_SOURCING=openhands_managed
# 2026-09-17 12:37:23 0.00B 设置环境变量 LOG_JSON
ENV LOG_JSON=true
# 2026-09-17 12:37:23 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-09-17 12:37:23 0.00B 设置环境变量 LC_ALL
ENV LC_ALL=C.UTF-8
# 2026-09-17 12:37:23 0.00B 设置工作目录为/
WORKDIR /
# 2026-09-17 12:37:23 0.00B 指定运行容器时使用的用户
USER openhands
# 2026-09-17 12:37:23 49.00B 执行命令并创建新的镜像层
RUN |6 USERNAME=openhands UID=10001 GID=10001 PORT=8000 OPENHANDS_BUILD_GIT_SHA=632894b716ef3f4b44932bdfadb61b414c64c8d9 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.49.1 /bin/sh -c mkdir -p /etc/claude-code && echo '{"permissions":{"allow":["Edit","Read","Bash"]}}' > /etc/claude-code/managed-settings.json # buildkit
# 2026-09-17 12:37:23 0.00B 执行命令并创建新的镜像层
RUN |6 USERNAME=openhands UID=10001 GID=10001 PORT=8000 OPENHANDS_BUILD_GIT_SHA=632894b716ef3f4b44932bdfadb61b414c64c8d9 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.49.1 /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-09-17 12:37:23 223.00B 复制新文件或目录到容器中
COPY /opt/acp-wrappers/. /usr/local/bin/ # buildkit
# 2026-09-17 12:37:23 1.01GB 复制新文件或目录到容器中
COPY /acp-node /acp-node # buildkit
# 2026-09-17 12:37:11 0.00B 设置环境变量 ACP_NODE_DIR
ENV ACP_NODE_DIR=/acp-node
# 2026-09-17 12:37:11 101.26MB 执行命令并创建新的镜像层
RUN |6 USERNAME=openhands UID=10001 GID=10001 PORT=8000 OPENHANDS_BUILD_GIT_SHA=632894b716ef3f4b44932bdfadb61b414c64c8d9 OPENHANDS_BUILD_GIT_REF=refs/tags/v1.49.1 /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 git shadow-utils tmux; microdnf clean all; elif command -v dnf >/dev/null 2>&1; then dnf install -y bash ca-certificates git shadow-utils tmux; dnf clean all; elif command -v yum >/dev/null 2>&1; then yum install -y bash ca-certificates 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 git shadow tmux; zypper clean --all; else echo "Unsupported base image: no known package manager found" >&2; exit 1; fi; 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-09-17 12:37:00 0.00B 设置环境变量 OPENHANDS_BUILD_GIT_REF
ENV OPENHANDS_BUILD_GIT_REF=refs/tags/v1.49.1
# 2026-09-17 12:37:00 0.00B 设置环境变量 OPENHANDS_BUILD_GIT_SHA
ENV OPENHANDS_BUILD_GIT_SHA=632894b716ef3f4b44932bdfadb61b414c64c8d9
# 2026-09-17 12:37:00 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_REF=unknown
# 2026-09-17 12:37:00 0.00B 定义构建参数
ARG OPENHANDS_BUILD_GIT_SHA=unknown
# 2026-09-17 12:37:00 0.00B 定义构建参数
ARG USERNAME UID GID PORT
# 2026-09-17 12:37:00 41.11MB 执行命令并创建新的镜像层
RUN |1 DEBIAN_SNAPSHOT=20260913T000000Z /bin/sh -c set -eux; ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm; ln -s ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx; ln -s ../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-09-17 12:36:42 12.79MB 复制新文件或目录到容器中
COPY /usr/local/lib/node_modules /usr/local/lib/node_modules # buildkit
# 2026-09-17 12:36:41 126.60MB 复制新文件或目录到容器中
COPY /usr/local/bin/node /usr/local/bin/node # buildkit
# 2026-09-17 12:36:40 32.36MB 复制新文件或目录到容器中
COPY /usr/local /usr/local # buildkit
# 2026-09-17 12:36:40 0.00B 定义构建参数
ARG DEBIAN_SNAPSHOT=20260913T000000Z
# 2026-08-24 08:00:00 78.64MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1787529600'
镜像信息
{
"Id": "sha256:de78eb828e1b0fa8bd60505cb4a23b3705f07ec6e885d4820d18e377575c214b",
"RepoTags": [
"ghcr.io/openhands/agent-canvas:1.20.0",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/openhands/agent-canvas:1.20.0"
],
"RepoDigests": [
"ghcr.io/openhands/agent-canvas@sha256:7c3d078f408dbc75233a098b63bb3f3cda475ee5d0024d8b934e148c8f063638",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/openhands/agent-canvas@sha256:224583c702ba7160d6b77fbfd95204797500fa519a4eeb1666b71eb6a88b7505"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-09-17T07:17:01.052783326Z",
"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=632894b716ef3f4b44932bdfadb61b414c64c8d9",
"OPENHANDS_BUILD_GIT_REF=refs/tags/v1.49.1",
"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=9737f713616a1e452f822c2967f0e2c8bf2dc308",
"AGENT_CANVAS_BUILD_GIT_REF=refs/tags/v1.20.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": "9737f713616a1e452f822c2967f0e2c8bf2dc308",
"org.opencontainers.image.source": "https://github.com/OpenHands/OpenHands",
"org.opencontainers.image.title": "agent-canvas",
"org.opencontainers.image.version": "1.20.0"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 3762203473,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/87ea5c1a221c12f21fbb840fc3485bff166ec1dd1d4cd428fdc5fb8567150859/diff:/var/lib/docker/overlay2/bc066cd97115b2b4fadd1f1cd91b554a37f4aa6edd9d74f70f511cb6cad7380b/diff:/var/lib/docker/overlay2/b0fd8a55e1f135c3e845d4742b37a25b8aea5a1aabfd29873965b20e159b3c38/diff:/var/lib/docker/overlay2/54d22e496dbb431761973b52477bbe344796eb8d2d23085300082bd3735e110b/diff:/var/lib/docker/overlay2/8e952fa68f8e1d1651a8a7087c28fea73c18ef08abbc0321ea8c74fa097654bd/diff:/var/lib/docker/overlay2/44b1616033057d549067f3a542e96518f16d628ad965d4935fb3582186b9b7cf/diff:/var/lib/docker/overlay2/bcf7d07ecb3f437feef808e21b9fa7d32f49a040732c496af1554a2efc13e71f/diff:/var/lib/docker/overlay2/123fe9eb352bc4b2c355c63c57002b68aaf1689b60006ccabd27b65b2a315628/diff:/var/lib/docker/overlay2/954fec1ed9c64db287fa2703c2e82ba02259654c7b88c208df850fc0e745ebaa/diff:/var/lib/docker/overlay2/9c8fe6883076c36c8c276f5e18f325b8a5cf93e9ad0103dda58257ee2529207f/diff:/var/lib/docker/overlay2/bfedac879793bccb730d4bd2fc2f3273f38a3d3134c57821a36cc892679b88cc/diff:/var/lib/docker/overlay2/98b4fb6399454129f6413ec6b1bbb55938fca5aa895319c05c106e2c7e0739b2/diff:/var/lib/docker/overlay2/40dab7a084124d38ea2a3e3446f3e63e3bc999d28fa1995c610a34b0477edaad/diff:/var/lib/docker/overlay2/c68384676d2f894ded04b5f3b4cea515364b519150dcc5977a75ac1209afefb0/diff:/var/lib/docker/overlay2/7929cb4aea94da42f9f23570c66613ce9b9a95cde820b2bcd00b16335760b510/diff:/var/lib/docker/overlay2/8bef72d2cd9bea3f7c2c6e2f2281e7c8a10ea9c014977b1da190038a54fa1c78/diff:/var/lib/docker/overlay2/3d4e1d818bb91add96d8e01bd92d4fd677962abe2380237a2dd23bb81bfb618a/diff:/var/lib/docker/overlay2/850b5c29c88033dc2931ad01cd23f1d798411f485734d665be3ecdde9bf7ad76/diff:/var/lib/docker/overlay2/fa2bd2e114589a7fae62de956bd47cebfb4f3d91747478930b2f0c95545a1935/diff:/var/lib/docker/overlay2/5a4d15589655846e6bdaa5adfdaab8feb4fbc1715f0620a9733b4a66e9de8b36/diff:/var/lib/docker/overlay2/6575a96d474d82f7524b8730849f645ff3395bff3592ea7c2b07ee252a869c40/diff:/var/lib/docker/overlay2/a78e56e99538188952a894487b02f90057f928cf67b1a30b4adb6642e62f5ea7/diff:/var/lib/docker/overlay2/fa8e46823ebfc6029bc4050bd632a034ef334814394e6799dbdd43c47337148f/diff:/var/lib/docker/overlay2/a7ef962a37d5be1d07267c21e0be86f4cc3b45dc08b82b19f894b3c45ef3843f/diff:/var/lib/docker/overlay2/2fecb19c472ee8bc94a00cdc45579b4ca85b71dd09efd85e45e2df28e4d033a5/diff:/var/lib/docker/overlay2/e165562802a787c1b92428027b5731443cf8a3cc2483c638d47cd0047cd3ceec/diff:/var/lib/docker/overlay2/dfe33e2f0c22c7e7eb653f9f9b33ff62131a14ccd852b8846b6d05df48a0e817/diff:/var/lib/docker/overlay2/7465422d558f2665f002a1206e98f25e259222b0db8aac43c311fc61564a2490/diff:/var/lib/docker/overlay2/695ca3892db85fab0e7ee3dc3d28f4e0b419d5d434c9f6ad10ad8f19bf6f2744/diff:/var/lib/docker/overlay2/6f6de8e30941613924b6c7affd2fe4c9f0618b3191d6295daf9c7e63e99314f2/diff:/var/lib/docker/overlay2/a8e485f85f7166291fb4740ef1864a204f1c621a19a777579d9ae87b23b4018d/diff:/var/lib/docker/overlay2/16ffdc175ac611ebeb2428cee774a227ce5ac1aa6345c853cf473fb9fb3f08b3/diff:/var/lib/docker/overlay2/64570fde1fa9d8bc98fe67363b134d31150bfb818ce3cf37a8b105545e22cc4d/diff:/var/lib/docker/overlay2/345ace8363cf153607e44688da8cf8d553912c88c2980eb84ea1ec4b125fac16/diff:/var/lib/docker/overlay2/541e62c6718c6f96ce4b1e57f6e7345a791521fe691a5880f5e7ff84dbff38b4/diff:/var/lib/docker/overlay2/c2a696dacdcd5b8480d9f883645aef5d7f18bb808ab62a8bfbe4920c17c72905/diff",
"MergedDir": "/var/lib/docker/overlay2/2a6fd033aa89e65ed3608194afc147c69c4657c78360462a92ef71392695c1cb/merged",
"UpperDir": "/var/lib/docker/overlay2/2a6fd033aa89e65ed3608194afc147c69c4657c78360462a92ef71392695c1cb/diff",
"WorkDir": "/var/lib/docker/overlay2/2a6fd033aa89e65ed3608194afc147c69c4657c78360462a92ef71392695c1cb/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:411a86676185cb54d695a805b238194a64e9b77e0c723f3802fbb87d333ea0b3",
"sha256:01cc1950098fbbce1ebd22dc49cb25e58f4c269133ac6fa10960a6d81715deda",
"sha256:69f1c039dec84ff892b8d81317736ac64a1256f210cdad799bc50c7bd31835a5",
"sha256:625e0bbf10532244dd848b632df0f688ff044bafd57c5054cd6d901f8d3c44a0",
"sha256:1fb4cde455566d2cd4cb7e50b51850956fa48f4561e1000697302b58b4124e5c",
"sha256:a0ab7f3a7497404f93faabfa2d4fa4a2ac08ee4809d59ac99cb27586005a4f5a",
"sha256:2480b1dc91bfc5cef0c0eb36d5a52d86075fa9531987882f2b5b709b501463c7",
"sha256:f696ed1cf54c04b10b9f360866b80ac011b8e047348c874dce890341c1caf6c0",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:c8d4393b1211088443fcf4e1118256713e107494c3710f64c530ea115035398a",
"sha256:c06b62998186cdd8238d181698599f986b11c8b74bcc5670d956133c28594b9e",
"sha256:1880b6c16eb33f17a8b71376a0b23ad0376f7fc6a2f18e16ecfe44c5d9f7983a",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:47e6162fff4e1fc741618effd9c881d54c259ef4220ee7d215e859b151bc7b63",
"sha256:d58b327b5d93d00ec3245a4ee9004c657833fec760e42a695f15493497b6f812",
"sha256:6e2d4049b3e67dd4791c7a08269155b9b705ae2fe603ec70ff7592774ec527cc",
"sha256:ef3e01218c396b1a3e00b62fd6cb2e607ba40e0067a8e5b0a5b837879161bb0b",
"sha256:86faa145b7b52fbdf0ce40be28bc8db605c3072f0b1edf6254fe89d2c0d345ad",
"sha256:164e4ddc2d7e67105af3c879457d0c34d9ff11249445aea50f8a1237e027d08b",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:358ab634b60495909aeac21468b233be59791aeb67ff2452d61a05e641de68a5",
"sha256:885b160840037aec4e38a8ebf6b07603b33cd692f69facd19cb748d0373e4355",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:0f5d29b481b12be91100a62a076c42137e5c0261aa579fd48542f16bed0abdab",
"sha256:3e5e4e67ed373b236c323b8fd9369b5faa97e39bac9e2091a64cb022fe8a1af4",
"sha256:b3add2f729ca8708cbf182f02106527bc337b275e9d35bb2a14cc6445ee28310",
"sha256:17174707e8b0da202ed9a590b294cdd1e9f6015163e10722ea0e01049527d4f1",
"sha256:fcb57fc6840d8820c08fca87573ec9368852ed612eb6304ad4ba6b667eb0d318",
"sha256:51efc550bb470f48257720fa877bb512a30066f472fe213bac4dd54497421add",
"sha256:799b9d3d2b8e94afc0946e272b3659fd976b9a1fd0fa86ce6cd990f53b9d5840",
"sha256:80c8b7ef41f0374813b3d649d9d6ebd70423c8eb84b34afddd47625194a08055",
"sha256:4e3699bf12e0cfe139a77acc87e2870d62224a5ffbeb18fa55d15f3eef236cc3",
"sha256:9b74979b6b9c0cc27a7a142c1d00b228284e6fc209678476415e01b655cd24aa",
"sha256:66f9ae219759205b7f8ce5d7e8b5b252df71d2b4e7e40b7e590322bdba9c7937",
"sha256:289f6494333ae329e90ec8a4aba9f5b50baf110c7ac83bd3a076cf6cd4147ecd",
"sha256:b19545c2009921ba90c3aa55a139f72d552670f205f5611671e77857c2710578",
"sha256:f95e2dd3e3fcade5e24d38f526f24392c95a90e34bf8c088e2de467103315415"
]
},
"Metadata": {
"LastTagTime": "2026-09-17T16:02:14.334783021+08:00"
}
}