镜像构建历史
# 2026-09-15 05:42:50 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/app/entrypoint.sh"]
# 2026-09-15 05:42:50 0.00B 声明容器运行时监听的端口
EXPOSE [3080/tcp]
# 2026-09-15 05:42:50 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-09-15 05:42:49 554.36MB 执行命令并创建新的镜像层
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-09-15 05:42:27 1.96KB 复制新文件或目录到容器中
COPY .build-variants /app/.build-variants # buildkit
# 2026-09-15 05:42:27 0.00B 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c if [ "$DEV_TOOLS" = "admin" ]; then touch /app/.admin-mode; fi # buildkit
# 2026-09-15 05:42:27 2.64KB 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c chmod +x /app/entrypoint.sh # buildkit
# 2026-09-15 05:42:27 2.64KB 复制新文件或目录到容器中
COPY entrypoint.sh /app/entrypoint.sh # buildkit
# 2026-09-15 05:42:27 318.53KB 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c cd /app/manager && npm install --omit=dev --no-audit --no-fund # buildkit
# 2026-09-15 05:42:27 43.20KB 复制新文件或目录到容器中
COPY manager/ /app/manager/ # buildkit
# 2026-09-15 05:42:27 2.27MB 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c cd /app/proxy && npm install --omit=dev --no-audit --no-fund # buildkit
# 2026-09-15 05:42:26 23.05KB 复制新文件或目录到容器中
COPY proxy/ /app/proxy/ # buildkit
# 2026-09-15 05:42:26 23.00B 执行命令并创建新的镜像层
RUN |1 DEV_TOOLS=devtools /bin/sh -c if [ "$DEV_TOOLS" = "admin" ]; then node -p "'APP_VERSION=' + require('/opt/dsh/lib/node_modules/@deepseek-ai/dsh/package.json').version" > /tmp/app_version.env; else node -p "'APP_VERSION=' + require('/usr/local/lib/node_modules/@deepseek-ai/dsh/package.json').version" > /tmp/app_version.env; fi # buildkit
# 2026-09-15 05:27:21 0.00B 复制新文件或目录到容器中
COPY /opt/dsh/ /opt/dsh/ # buildkit
# 2026-09-15 05:27:21 223.93MB 复制新文件或目录到容器中
COPY /usr/local/ /usr/local/ # buildkit
# 2026-09-15 05:27:21 0.00B 定义构建参数
ARG DEV_TOOLS=devtools
# 2026-09-15 05:26:35 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-09-10 02:46:58 0.00B 设置默认要执行的命令
CMD ["node"]
# 2026-09-10 02:46:58 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["docker-entrypoint.sh"]
# 2026-09-10 02:46:58 388.00B 复制新文件或目录到容器中
COPY docker-entrypoint.sh /usr/local/bin/ # buildkit
# 2026-09-10 02:46:58 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-09-10 02:46:46 0.00B 设置环境变量 YARN_VERSION
ENV YARN_VERSION=1.22.22
# 2026-09-10 02:46:46 147.92MB 执行命令并创建新的镜像层
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 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C 108F52B48DB57BB0CC439B2997B01419BD92F80A 655F3B5C1FB3FA8D1A0CA6BDE4A7D232B936D2FD 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-09-10 02:46:46 0.00B 设置环境变量 NODE_VERSION
ENV NODE_VERSION=24.21.0
# 2026-09-10 02:46: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-24 08:00:00 74.83MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1787529600'
镜像信息
{
"Id": "sha256:e869753e64fff125777de635b054d2226bb9e0950e4e996ad43b842621ef6c09",
"RepoTags": [
"smanx/deepseek-harness:devtools-latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/smanx/deepseek-harness:devtools-latest"
],
"RepoDigests": [
"smanx/deepseek-harness@sha256:cff25273c3e8b6ad18ed39c9c9fe93d387d422ac937b1c5f3f68502702f728b4",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/smanx/deepseek-harness@sha256:4190d94185dc878678a2c268d9d5cd61f74d0555e9db831ff2853ed39b5c80a8"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-09-14T21:42:50.047558128Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3080/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=24.21.0",
"YARN_VERSION=1.22.22"
],
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"/app/entrypoint.sh"
],
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1010891188,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/38e3c6e2eb39e1396160390f04cf029b15338503d14f98fc8b167f81dd92e091/diff:/var/lib/docker/overlay2/04c3dec4e3b0f696e6191a534467393a66689399cf39a5b90ae399871954df8e/diff:/var/lib/docker/overlay2/83facb4d0cf2c0542f90bfd9f16c31fadc77880a67a96ea3559dfed6a23662e6/diff:/var/lib/docker/overlay2/1510c0ceb3224500e53489cff1bed887932e5534ed5b1c1ddb093d2e95845c40/diff:/var/lib/docker/overlay2/30871c68ed6f5f74814000dba8de531ab483dea3217ac6c5ccab514b69f3cdf3/diff:/var/lib/docker/overlay2/db89814e681d93da2fa234124675acdf72da63bc3b53e1fdf42eea7a2f7abaa4/diff:/var/lib/docker/overlay2/85f1c28e895ed1c5ec58c2eb23d434767772db3f9254a70f671aef5e82de212b/diff:/var/lib/docker/overlay2/930e7052f055351b0e8527ae3ff7d08329a6dcbed419c4f49b31037f0673153a/diff:/var/lib/docker/overlay2/ff80cba96ce7e7de05ca2385455abe9296ac77ddecc03c9bc4766ec0ae2763ce/diff:/var/lib/docker/overlay2/45f1efa2137312bdd297699c23653ac700e93520f5ca419bebedc8448a2af3ba/diff:/var/lib/docker/overlay2/331a365c4030969fc362c0457dbd2705b043f67bbae26f05735144a7cdae4494/diff:/var/lib/docker/overlay2/8ae115c777b874fefb19b0b918052ec969ca25e36b43f28a3aefccb37bb01de0/diff:/var/lib/docker/overlay2/7027513d352962bf5f83f9f315902e8d2a053e4a3a60bb54a9adc90867cc6556/diff:/var/lib/docker/overlay2/52908ac09905d3370db55ca787b1692161748f97f5564a7802038e443e2edc1c/diff:/var/lib/docker/overlay2/c704015137ead438fda2d0fb466c0875c088ce0f81d64e2a7469de129e22c320/diff:/var/lib/docker/overlay2/3fd2508bab54ee95cb81cfe92454f7cb4aaa72da1aa995b5e0197c5cd967b181/diff:/var/lib/docker/overlay2/f30a343bb756823e8ad6a63275120e4b9582f558b70ad579d54d629426a86c20/diff:/var/lib/docker/overlay2/4fb6c997901baaa25dd38086f0725b76f93a41f9b69f12b775f5ea6819ef9344/diff",
"MergedDir": "/var/lib/docker/overlay2/d822fe348b46e54331983929f023b8bc1338278313642ebfdb96f9e556678aeb/merged",
"UpperDir": "/var/lib/docker/overlay2/d822fe348b46e54331983929f023b8bc1338278313642ebfdb96f9e556678aeb/diff",
"WorkDir": "/var/lib/docker/overlay2/d822fe348b46e54331983929f023b8bc1338278313642ebfdb96f9e556678aeb/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:1d69a5fd31932841d7825ef4780c06f008eea65aaa9f3110fe09d5832ed5c7d8",
"sha256:8b44269dd12bb3a948a3fc91ba0ee4544375637bbc5995edabbbf2824d2a2e35",
"sha256:bd4b733ad7053e873d389686452b3ee8fb8009f4f1d5311b1af1fa9352ff5624",
"sha256:6b1a9ecc458f8b83983c566340ece48c9a605f1e13377190c686fb6f1e58a34a",
"sha256:a63f71a5ecc2aaf6cb0f20266a9a732c760b63f3a0f9e8a2bfee9a2fea576ab6",
"sha256:6dabd799494140d725df4d726707f82c0aa8b4c61e3e0aa12bebc3cc517d6c66",
"sha256:c9b79e62d2520557af5d59cca15847a7b8640a8b7d891e15a3a704cec20bbdd4",
"sha256:09fd2d15d6157dcab9ef12051a9e7f63ac031f06b781467c7a3716870f386c5e",
"sha256:b9003313fb15ca64b7d36ec513e90bffc1f74fb032edbcb40f01d09127988b42",
"sha256:4e2c66f298e39d90257b4c85951b5993358806c8cd67c8df5cdf0e2b5aa90968",
"sha256:7b11bfdca695210d921971f211cf7e660714dfd3bd8ea0c7c9cc683c9967686f",
"sha256:d7c0a2dd94cf1134253e6fa5e6fca1785720cca87a9443aecc19f79e20acd37b",
"sha256:070b7bec64c82f0090d049d1e3f5486fbca0487ccc6edf75691bb0c1120432a1",
"sha256:46c8a654226fc48deadb705a63583a429243ff59f30b50ceb7fcb49fbe35cf1e",
"sha256:6070b4d94d0019eacd606ba9050dcf82326503c579ca77fe9fae7180c6d06b1a",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:a24cd3c39bf6197c115fbae07c27eef4192b6bb972c463c902b40e063d1f28ad",
"sha256:c6548ccd33bfdc683a17dec6dd15e4a3fd19cf4e7f2804e069e626c68e5cc0a7",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
]
},
"Metadata": {
"LastTagTime": "2026-09-15T15:32:41.956604387+08:00"
}
}