镜像构建历史
# 2026-05-08 21:08:52 0.00B 设置默认要执行的命令
CMD ["/app/start-all.sh"]
# 2026-05-08 21:08:52 0.00B 设置环境变量 TOKENIZERS_PARALLELISM
ENV TOKENIZERS_PARALLELISM=false
# 2026-05-08 21:08:52 0.00B 设置环境变量 HF_HUB_VERBOSITY
ENV HF_HUB_VERBOSITY=error
# 2026-05-08 21:08:52 0.00B 设置环境变量 TRANSFORMERS_VERBOSITY
ENV TRANSFORMERS_VERBOSITY=error
# 2026-05-08 21:08:52 0.00B 设置环境变量 PYTHONUNBUFFERED
ENV PYTHONUNBUFFERED=1
# 2026-05-08 21:08:52 0.00B 设置环境变量 HINDSIGHT_ENABLE_CP
ENV HINDSIGHT_ENABLE_CP=true
# 2026-05-08 21:08:52 0.00B 设置环境变量 HINDSIGHT_ENABLE_API
ENV HINDSIGHT_ENABLE_API=true
# 2026-05-08 21:08:52 0.00B 设置环境变量 HINDSIGHT_CP_DATAPLANE_API_URL
ENV HINDSIGHT_CP_DATAPLANE_API_URL=http://localhost:8888
# 2026-05-08 21:08:52 0.00B 设置环境变量 NODE_ENV
ENV NODE_ENV=production
# 2026-05-08 21:08:52 0.00B 设置环境变量 HINDSIGHT_API_LOG_LEVEL
ENV HINDSIGHT_API_LOG_LEVEL=info
# 2026-05-08 21:08:52 0.00B 设置环境变量 HINDSIGHT_API_PORT
ENV HINDSIGHT_API_PORT=8888
# 2026-05-08 21:08:52 0.00B 设置环境变量 HINDSIGHT_API_HOST
ENV HINDSIGHT_API_HOST=0.0.0.0
# 2026-05-08 21:08:52 0.00B 声明容器运行时监听的端口
EXPOSE [8888/tcp 9999/tcp]
# 2026-05-08 21:08:52 307.69MB 执行命令并创建新的镜像层
RUN |2 PRELOAD_ML_MODELS=true INCLUDE_LOCAL_MODELS=true /bin/sh -c if [ "$PRELOAD_ML_MODELS" = "true" ] && [ "$INCLUDE_LOCAL_MODELS" = "true" ]; then MAX_RETRIES=3; RETRY_DELAY=10; for i in $(seq 1 $MAX_RETRIES); do echo "Attempt $i/$MAX_RETRIES: Downloading ML models..."; /app/api/.venv/bin/python -c "import os; os.environ['HF_HUB_DOWNLOAD_TIMEOUT'] = '600'; from sentence_transformers import SentenceTransformer, CrossEncoder; print('Downloading embedding model...'); SentenceTransformer('BAAI/bge-small-en-v1.5'); print('Downloading cross-encoder model...'); CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2'); print('Models cached successfully')" && break; if [ $i -lt $MAX_RETRIES ]; then echo "Attempt $i failed, retrying in ${RETRY_DELAY}s..."; sleep $RETRY_DELAY; RETRY_DELAY=$((RETRY_DELAY * 2)); fi; done; if [ $i -eq $MAX_RETRIES ] && ! /app/api/.venv/bin/python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('BAAI/bge-small-en-v1.5')" 2>/dev/null; then echo "ERROR: Failed to download models after $MAX_RETRIES attempts"; exit 1; fi; elif [ "$INCLUDE_LOCAL_MODELS" != "true" ]; then echo "Skipping ML model preload (local-models not included)"; else echo "Skipping ML model preload"; fi # buildkit
# 2026-05-08 21:08:20 0.00B 设置环境变量 HF_HUB_DOWNLOAD_TIMEOUT
ENV HF_HUB_DOWNLOAD_TIMEOUT=600
# 2026-05-08 21:08:20 0.00B 定义构建参数
ARG INCLUDE_LOCAL_MODELS=true
# 2026-05-08 21:08:20 0.00B 定义构建参数
ARG PRELOAD_ML_MODELS=true
# 2026-05-08 21:08:20 2.61MB 执行命令并创建新的镜像层
RUN /bin/sh -c MAX_RETRIES=3; RETRY_DELAY=5; for i in $(seq 1 $MAX_RETRIES); do echo "Attempt $i/$MAX_RETRIES: Downloading tiktoken encoding..."; /app/api/.venv/bin/python -c "import tiktoken; print('Downloading cl100k_base encoding...'); tiktoken.get_encoding('cl100k_base'); print('Tiktoken encoding cached successfully')" && break; if [ $i -lt $MAX_RETRIES ]; then echo "Attempt $i failed, retrying in ${RETRY_DELAY}s..."; sleep $RETRY_DELAY; RETRY_DELAY=$((RETRY_DELAY * 2)); fi; done; if [ $i -eq $MAX_RETRIES ]; then echo "ERROR: Failed to download tiktoken encoding after $MAX_RETRIES attempts"; exit 1; fi # buildkit
# 2026-05-08 21:08:18 0.00B 设置环境变量 PATH
ENV PATH=/app/api/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-05-08 21:08:18 0.00B 执行命令并创建新的镜像层
RUN /bin/sh -c chmod 755 /home/hindsight # buildkit
# 2026-05-08 21:08:18 0.00B 执行命令并创建新的镜像层
RUN /bin/sh -c mkdir -p /home/hindsight/.pg0 # buildkit
# 2026-05-08 21:08:18 0.00B 指定运行容器时使用的用户
USER hindsight
# 2026-05-08 21:08:17 1.85GB 执行命令并创建新的镜像层
RUN /bin/sh -c chown -R hindsight:hindsight /app # buildkit
# 2026-05-08 21:07:37 0.00B 执行命令并创建新的镜像层
RUN /bin/sh -c chmod +x /app/start-all.sh # buildkit
# 2026-05-08 21:07:37 8.46KB 复制新文件或目录到容器中
COPY docker/standalone/start-all.sh /app/start-all.sh # buildkit
# 2026-05-08 21:07:37 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-05-08 21:07:37 73.66KB 复制新文件或目录到容器中
COPY /app/memory-poc/hindsight-control-plane/public ./public # buildkit
# 2026-05-08 21:07:37 2.51MB 复制新文件或目录到容器中
COPY /app/memory-poc/hindsight-control-plane/.next/static ./.next/static # buildkit
# 2026-05-08 21:07:37 38.92MB 复制新文件或目录到容器中
COPY /app/memory-poc/hindsight-control-plane/standalone ./ # buildkit
# 2026-05-08 21:06:02 0.00B 设置工作目录为/app/control-plane
WORKDIR /app/control-plane
# 2026-05-08 21:06:02 7.62MB 复制新文件或目录到容器中
COPY /app/hindsight-clients/typescript /app/sdk # buildkit
# 2026-05-08 21:06:01 1.80GB 复制新文件或目录到容器中
COPY /app/api /app/api # buildkit
# 2026-05-08 21:05:50 8.93KB 执行命令并创建新的镜像层
RUN /bin/sh -c useradd -m -s /bin/bash hindsight # buildkit
# 2026-05-08 21:05:49 327.91MB 执行命令并创建新的镜像层
RUN /bin/sh -c apt-get update && apt-get install -y curl procps libxml2 libssl3 libgssapi-krb5-2 libossp-uuid16 && (apt-get install -y libicu72 2>/dev/null || apt-get install -y libicu74 2>/dev/null || apt-get install -y libicu76 2>/dev/null || true) && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt-get install -y nodejs && rm -rf /var/lib/apt/lists/* && pip install --no-cache-dir uv # buildkit
# 2026-05-08 21:04:26 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-04-22 10:09:07 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-04-22 10:09:07 36.00B 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit
# 2026-04-22 10:09:07 42.05MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; apt-get dist-clean; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 install --disable-pip-version-check --no-cache-dir --no-compile 'setuptools==79.0.1' 'wheel<0.46' ; pip3 --version # buildkit
# 2026-04-22 10:01:45 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625
# 2026-04-22 10:01:45 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.11.15
# 2026-04-22 10:01:45 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D
# 2026-04-22 10:01:45 3.81MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; apt-get dist-clean # buildkit
# 2026-04-22 10:01:45 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-04-22 10:01:45 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-04-21 08:00:00 78.62MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1776729600'
镜像信息
{
"Id": "sha256:3d7d8326614555df09837fd895551e806f0b1315faf13011fbe8f47dad549098",
"RepoTags": [
"ghcr.io/vectorize-io/hindsight:0.6.1",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/vectorize-io/hindsight:0.6.1"
],
"RepoDigests": [
"ghcr.io/vectorize-io/hindsight@sha256:5484d4a12d40146dfa4bece466d3f7a30f754b4aa1a8c263645af00abc545250",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/vectorize-io/hindsight@sha256:79069181071d39e370695c08d57f916889edb44ea900f97ded26fca6fc48ea89"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-05-08T13:08:52.934060647Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "hindsight",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8888/tcp": {},
"9999/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/app/api/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=C.UTF-8",
"GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D",
"PYTHON_VERSION=3.11.15",
"PYTHON_SHA256=272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625",
"HF_HUB_DOWNLOAD_TIMEOUT=600",
"HINDSIGHT_API_HOST=0.0.0.0",
"HINDSIGHT_API_PORT=8888",
"HINDSIGHT_API_LOG_LEVEL=info",
"NODE_ENV=production",
"HINDSIGHT_CP_DATAPLANE_API_URL=http://localhost:8888",
"HINDSIGHT_ENABLE_API=true",
"HINDSIGHT_ENABLE_CP=true",
"PYTHONUNBUFFERED=1",
"TRANSFORMERS_VERBOSITY=error",
"HF_HUB_VERBOSITY=error",
"TOKENIZERS_PARALLELISM=false"
],
"Cmd": [
"/app/start-all.sh"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2026-05-08T13:04:19.832Z",
"org.opencontainers.image.description": "Hindsight: Agent Memory That Learns",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.revision": "0f7c5e895b2fc0ff6a9047a1e9e9e5785207c784",
"org.opencontainers.image.source": "https://github.com/vectorize-io/hindsight",
"org.opencontainers.image.title": "hindsight",
"org.opencontainers.image.url": "https://github.com/vectorize-io/hindsight",
"org.opencontainers.image.version": "0.6.1"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 4462834766,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/a3786a37c938e72327ff8f1edb53a2103021275077d9d6bf34e247b32b2bc999/diff:/var/lib/docker/overlay2/993a39e59ccd229e7d992e157033019cd1c7b2d6e3584dbbca1775c407a6d89c/diff:/var/lib/docker/overlay2/e8587031dbe7ad11188417983f55d258d2ccaba35fca087476fd6653ac70bab3/diff:/var/lib/docker/overlay2/a9152f8fb579855d0444c32c39b1187d6a0c974c6bb97db6f300bb7fc420f94f/diff:/var/lib/docker/overlay2/bac13de82828072d327889eac8574b002daa0c6611753ef0af1c8ccffd4f5576/diff:/var/lib/docker/overlay2/e993c3b6328d9cbe1869e0d3278e43cb7b06ca5a8d9954403cff8fcf23a8926c/diff:/var/lib/docker/overlay2/3093f0ae8456d339ffdf31cfeacc02c93f1b7bbd7351398fe9eb1a0ae0342450/diff:/var/lib/docker/overlay2/287ea8a9feaea5e73180921c2b59449f7a7b2c48561e903950d5ee367a95d1b2/diff:/var/lib/docker/overlay2/7f728c1bf1a9208889ac1f1fc93cf8fa945e5bef75e079670b73749ce0ed7620/diff:/var/lib/docker/overlay2/5201180e8a746de13687b4fa05cea4e5532d60bf2b3c6e9ab66f9d0990c8259e/diff:/var/lib/docker/overlay2/2c20ead377f5573bc539b04e6164c811e24096739579894b209d8b3f929a4925/diff:/var/lib/docker/overlay2/a59fb3fa07cc5f799d70e0d37c71d3cd41a9aad1d4462a6135e13cfebafba420/diff:/var/lib/docker/overlay2/010f415d99568c17b9a75d25da0371d9edcfc45718d598481449f3245d9cab3b/diff:/var/lib/docker/overlay2/4736205d12febd9249c74f37e99fe8cea2a28beb5aedc1bc0c52cfdb1a861c03/diff:/var/lib/docker/overlay2/9b881eef7c2043a00a7d3151c44e5e8af1e1f492ef09091b5563d0d5494c9f05/diff:/var/lib/docker/overlay2/e4bf2651549d3f6fd5322d2694a8b084f5b3ab6dcf4cd7d6df6b618aadbff8e8/diff:/var/lib/docker/overlay2/6d1c2ae28e2f5f59fd22f664d350be112884905819c8133d8a9bec06d3d3b840/diff:/var/lib/docker/overlay2/bff192361aa35af506c8dfcc420c338e8a0e7c8e9e6aedb90b3aaff024d24307/diff:/var/lib/docker/overlay2/49ff68fab55b7631fa6d082c415d31ab8b3d3962d1d76302467f180da50138c2/diff:/var/lib/docker/overlay2/e0f324114c7f7f7183227eb59d9ef7c98638746764cc54ffe3da0d812ded28ef/diff",
"MergedDir": "/var/lib/docker/overlay2/9e7362ab159dfa5111286c49cc079d8f9875d381f3d9301072f9e35dd7686121/merged",
"UpperDir": "/var/lib/docker/overlay2/9e7362ab159dfa5111286c49cc079d8f9875d381f3d9301072f9e35dd7686121/diff",
"WorkDir": "/var/lib/docker/overlay2/9e7362ab159dfa5111286c49cc079d8f9875d381f3d9301072f9e35dd7686121/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:6d7c150df58d41c351cd9b03f1cda7a9a23d6fc91436e2bf0f098c6dd78c9c55",
"sha256:fa1aec8230350aec33b1ea2bf41dcab77f0cac7e509ee344dae49cb5098e4f27",
"sha256:248c30140986d3a122b24d7f494e47c7b94c0012fa719553af79e2b64648bd7a",
"sha256:2360b28b46605ab7f59674ea7647861778e22bd6f2442d1fdfb04a93787028d7",
"sha256:9a298f1360cbdaed6362023d9b1314f22501bd9897a34d481311720b4a493529",
"sha256:32b83e370511addb0bc2dd4fcbd35e409c879db6620b52607cd07d1c7c4405ec",
"sha256:0f474ca2509aca3363ebd0980a84bbcae0681e00d2d24ca09cd424bb7e8beb63",
"sha256:5b378645147d00cc22b41286b394701a48729aedbb5d6b58e2cfa15ac95d723e",
"sha256:bdef7ca06eef30b5c58138fa4d05eaa0ad88e753c49d1b93f99ad4acfca7f2e2",
"sha256:0f98697114b9b2adfa615a4c2cf4a36b2fa6150f3dccf3d6b72eb7cb14f80b75",
"sha256:22998417c1ce5478230132648c73bce57798ceddd15221580b62df1ef70e14fa",
"sha256:1650923a8c2543232e21231b5b49685ddc51939d5ada2c4c3afa8a5a3734f278",
"sha256:adb5ffca65157d6b062a873e42cc1fd1e0af253a4c78ae3a2e2994ee5ec2c303",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:cf6eee3f9e46ed82a810bad25102288f61069415e50d1b3ae9a4c411480458b5",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:a58c84190160be252919aa77515e211b9d685aeaf988b36c57de934288263ba3",
"sha256:039dea55f86bb910995749ffbe2fd5c03e5e71a704b96f457ca2fa747ddb93f9",
"sha256:7b009e7aac793270c5c1a9958d96948505863471e6f2451a1ae4f4babaeccf5d",
"sha256:9bfa2d654c75202f6a8f9fc98ccc1df23a5cb102c99ba7a3e9e1cb4a406de057",
"sha256:743c3ec9753b518f25850fd83a774d4255bea992bf9f84a138726de6c8faee6d"
]
},
"Metadata": {
"LastTagTime": "2026-05-12T15:34:48.06147988+08:00"
}
}