镜像构建历史
# 2026-08-24 02:36:25 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/app/entrypoint.sh"]
# 2026-08-24 02:36:25 0.00B 声明容器运行时监听的端口
EXPOSE [3081/tcp]
# 2026-08-24 02:36:25 0.00B 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c if [ "$DEV_TOOLS" = "test" ]; then dsh plugin --profile web add github:smanx/dsh-fixed-providers#master; fi # buildkit
# 2026-08-24 02:36:24 515.02MB 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c if [ -n "$DEV_TOOLS" ] && [ "$DEV_TOOLS" != "none" ]; then PACKAGES="$(awk -F'|' -v p="$DEV_TOOLS" '$1==p {print $2}' /app/.build-variants)"; NPM_PKGS="$(awk -F'|' -v p="$DEV_TOOLS" '$1==p {print $3}' /app/.build-variants)"; UV_FLAG="$(awk -F'|' -v p="$DEV_TOOLS" '$1==p {print $4}' /app/.build-variants)"; if [ -n "$PACKAGES" ]; then apt-get update && apt-get install -y --no-install-recommends $PACKAGES && rm -rf /var/lib/apt/lists/*; fi; if [ -n "$NPM_PKGS" ]; then npm install -g --no-audit --no-fund $NPM_PKGS; fi; if [ "$UV_FLAG" = "1" ]; then curl -LsSf https://astral.sh/uv/install.sh | UV_INSTALL_DIR=/usr/local/bin sh; fi; fi # buildkit
# 2026-08-24 02:33:41 1.44KB 复制新文件或目录到容器中
COPY .build-variants /app/.build-variants # buildkit
# 2026-08-24 02:33:41 1.79KB 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c chmod +x /app/entrypoint.sh # buildkit
# 2026-08-24 02:33:40 1.79KB 复制新文件或目录到容器中
COPY entrypoint.sh /app/entrypoint.sh # buildkit
# 2026-08-24 02:33:40 2.27MB 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c cd /app/proxy && npm install --omit=dev --no-audit --no-fund # buildkit
# 2026-08-24 02:33:32 7.12KB 复制新文件或目录到容器中
COPY proxy/ /app/proxy/ # buildkit
# 2026-08-24 02:33:32 23.00B 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c node -p "'APP_VERSION=' + require('/usr/local/lib/node_modules/@deepseek-ai/dsh/package.json').version" > /tmp/app_version.env # buildkit
# 2026-08-24 02:29:40 201.60MB 复制新文件或目录到容器中
COPY /usr/local/ /usr/local/ # buildkit
# 2026-08-24 02:29:40 0.00B 定义构建参数
ARG DEV_TOOLS=devtools
# 2026-08-24 02:24:35 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-08-05 08:52:01 0.00B 设置默认要执行的命令
CMD ["node"]
# 2026-08-05 08:52:01 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["docker-entrypoint.sh"]
# 2026-08-05 08:52:01 388.00B 复制新文件或目录到容器中
COPY docker-entrypoint.sh /usr/local/bin/ # buildkit
# 2026-08-05 08:52:01 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-08-05 08:51:49 0.00B 设置环境变量 YARN_VERSION
ENV YARN_VERSION=1.22.22
# 2026-08-05 08:51:49 143.14MB 执行命令并创建新的镜像层
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';; arm64) ARCH='arm64' OPENSSL_ARCH='linux-aarch64';; *) 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 655F3B5C1FB3FA8D1A0CA6BDE4A7D232B936D2FD ; 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-08-05 08:51:49 0.00B 设置环境变量 NODE_VERSION
ENV NODE_VERSION=24.19.0
# 2026-08-05 08:51:28 8.90KB 执行命令并创建新的镜像层
RUN /bin/sh -c groupadd --gid 1000 node && useradd --uid 1000 --gid node --shell /bin/bash --create-home node # buildkit
# 2026-08-03 08:00:00 97.21MB
# debian.sh --arch 'arm64' out/ 'bookworm' '@1785715200'
镜像信息
{
"Id": "sha256:b010955efeb4638b7a638bcd653b46ce4f0b160a5f4a075aaa00d10996736a6b",
"RepoTags": [
"smanx/deepseek-harness:devtools-latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/smanx/deepseek-harness:devtools-latest-linuxarm64"
],
"RepoDigests": [
"smanx/deepseek-harness@sha256:6b1c0172fd54d34df66e3fafb6645e3193be147196b8641cd8bc1b0db6d0ad65",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/smanx/deepseek-harness@sha256:b49cf8b772d2ef823a071a493fa263b82fafe185873d7343fa4eae45f719fd6f"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-08-23T18:36:25.107849988Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3081/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=24.19.0",
"YARN_VERSION=1.22.22"
],
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"/app/entrypoint.sh"
],
"OnBuild": null,
"Labels": null
},
"Architecture": "arm64",
"Os": "linux",
"Size": 966443028,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/5dd6cb1a45b10a8aaca0a9703c4b7a683b04420fea5e368e88b5df308c41fb51/diff:/var/lib/docker/overlay2/df3ce00b73ec2658f0a4af47d92b27b4106826debc6a994df2d5fc93c24ee50c/diff:/var/lib/docker/overlay2/0909287e82f8793d1463aff942abb8a169079772bbf2d41d047d3a8912e57c62/diff:/var/lib/docker/overlay2/d59513cb0bd3ad32003e947f72bda7bacde13e94776b5ea3d92594eec216018e/diff:/var/lib/docker/overlay2/80b08d54043a1b7c21f7ddc7e5ab08902a8996492868d205c95fd927f3275a00/diff:/var/lib/docker/overlay2/7b46684d8b281f522c65d5bc3b1de9f8e3119423dcbd7699fea3a0c1a2a47c93/diff:/var/lib/docker/overlay2/951590775e034bef7e7f946e99350a79f4eb30641d5a4ddb638667f73c7f735c/diff:/var/lib/docker/overlay2/13e9f0598e3183824c19a0a6d3d269430c9ca7fcd8c1d4a643c6365b32630711/diff:/var/lib/docker/overlay2/297b8c36e4b46ea5610f94176cc69166d84dce57183b95406275e441820b4104/diff:/var/lib/docker/overlay2/73d6d2c8477bb9cfe66ae4e54e9aee95a58d0b6de5b6a04c6f4f2eb86cd8a642/diff:/var/lib/docker/overlay2/2e0f8f1113704e7b5521bd0ba65440cacb725ce4e07cf5218146647daf278ac5/diff:/var/lib/docker/overlay2/b29643a82a038577658a4b4c9834ef55960a6e706f03037d7236730f0ca7dfb7/diff:/var/lib/docker/overlay2/e0126e2590bf964118c8c44abf8c85f32d541d338049cc5aaee6fa64b18db5f1/diff:/var/lib/docker/overlay2/1a8522922bd0af195f6aeaffe189fa6cab3c3222f13dd94813a9f066e013edd8/diff",
"MergedDir": "/var/lib/docker/overlay2/da28980005c16a941bdbf58f6ae15965a53dcf5d423db2d384538b930b777ab7/merged",
"UpperDir": "/var/lib/docker/overlay2/da28980005c16a941bdbf58f6ae15965a53dcf5d423db2d384538b930b777ab7/diff",
"WorkDir": "/var/lib/docker/overlay2/da28980005c16a941bdbf58f6ae15965a53dcf5d423db2d384538b930b777ab7/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:709e0d49f62206f760d5392af4f1dab26c0017f4242f3975ffe0b2ce705f42e6",
"sha256:beae6d6c829784b551bccc72a04c724b5becd739c962093c0e99db5b5ce65b46",
"sha256:344140a05ac941321abe66fe30488f426bfa7cf319897947068ee3a007298432",
"sha256:9b02b1b28150f95ed3b33095e0507aec69d3f7923ca80e6242944be4bfbafdf3",
"sha256:4009db204429612be36f944d9e853ea8be449a222da802aadad56c606fb8b5cd",
"sha256:b33e8a4c1ab24fc076f0aa0a52d40437f8feaa83e43145c624fddea753dbf525",
"sha256:f5b836eb6ae85a7edae11a34fcd86ecc586227609cf58aed8dff7f3731e07387",
"sha256:15bc5fcec66987ed4034c461d34cad4eb5d92ff0a81273bb91243351fb8ef4d1",
"sha256:41ea78ce7283938764a9b53eb84898f07b5f337cf09809eb8499004dbfc66da0",
"sha256:c168d2e623845e7f7e43f27376616d9ee33be0b906cd0a1bba2048daa97f5d5f",
"sha256:ae685c3e365603ced78245eacfccaa356d72bdbee942b43607c2067bbf3b018a",
"sha256:20067c9045a2430eabf0bb3e682a2b9501316ef81c718ad18d7e05607c734779",
"sha256:f56c5ca1f397982e1a0abe401faaa70e35a50f1556314992751cb9a4e0751558",
"sha256:4a2cdfabe7d02fe9955e307f9029f6bfd710d583d635183dacacdc104ebe1554",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
]
},
"Metadata": {
"LastTagTime": "2026-08-25T00:58:40.021666864+08:00"
}
}