镜像构建历史
# 2026-02-10 11:46:31 0.00B 设置默认要执行的命令
CMD ["python" "-m" "uvicorn" "app.main:app" "--host" "0.0.0.0" "--port" "8000"]
# 2026-02-10 11:46:31 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
# 2026-02-10 11:46:31 0.00B 设置环境变量 DOCKER_CONTAINER
ENV DOCKER_CONTAINER=true
# 2026-02-10 11:46:31 0.00B 声明容器运行时监听的端口
EXPOSE [8000/tcp]
# 2026-02-10 11:46:31 13.58KB 复制新文件或目录到容器中
COPY docker/.env.docker ./.env # buildkit
# 2026-02-10 11:46:31 11.34KB 执行命令并创建新的镜像层
RUN |2 TARGETARCH=amd64 COMPILE_DIR=docker/build/compiled /bin/sh -c chmod +x /usr/local/bin/docker-entrypoint.sh # buildkit
# 2026-02-10 11:46:31 11.34KB 复制新文件或目录到容器中
COPY docker/scripts/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh # buildkit
# 2026-02-10 11:46:31 2.13MB 复制新文件或目录到容器中
COPY install ./install # buildkit
# 2026-02-10 11:35:13 16.19MB 复制新文件或目录到容器中
COPY docs ./docs # buildkit
# 2026-02-10 11:35:13 4.49MB 复制新文件或目录到容器中
COPY scripts ./scripts # buildkit
# 2026-02-10 11:35:12 25.66KB 复制新文件或目录到容器中
COPY config ./config # buildkit
# 2026-02-10 11:35:12 19.48MB 执行命令并创建新的镜像层
RUN |2 TARGETARCH=amd64 COMPILE_DIR=docker/build/compiled /bin/sh -c chmod +x /tmp/compile-and-cleanup.sh && pip install Cython && /tmp/compile-and-cleanup.sh && rm -f /tmp/compile-and-cleanup.sh && apt-get purge -y gcc g++ python3-dev && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-02-10 11:34:43 9.71KB 复制新文件或目录到容器中
COPY docker/scripts/compile-and-cleanup.sh /tmp/compile-and-cleanup.sh # buildkit
# 2026-02-10 11:34:43 2.03MB 复制新文件或目录到容器中
COPY tradingagents ./tradingagents # buildkit
# 2026-02-10 11:34:42 1.36MB 复制新文件或目录到容器中
COPY core ./core # buildkit
# 2026-02-10 11:34:42 4.25MB 复制新文件或目录到容器中
COPY app ./app # buildkit
# 2026-02-10 11:34:42 259.00B 复制新文件或目录到容器中
COPY BUILD_INFO ./BUILD_INFO # buildkit
# 2026-02-07 17:45:22 1.23GB 执行命令并创建新的镜像层
RUN |2 TARGETARCH=amd64 COMPILE_DIR=docker/build/compiled /bin/sh -c apt-get update && apt-get install -y --no-install-recommends gcc g++ python3-dev && pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install --prefer-binary . -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install --prefer-binary pdfkit -i https://pypi.tuna.tsinghua.edu.cn/simple && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-02-07 09:00:18 16.14KB 复制新文件或目录到容器中
COPY pyproject.toml README.md ./ # buildkit
# 2026-02-07 09:00:18 610.43MB 执行命令并创建新的镜像层
RUN |2 TARGETARCH=amd64 COMPILE_DIR=docker/build/compiled /bin/sh -c mkdir -p /app/logs /app/data /app/config && echo 'Acquire::Retries "3";' > /etc/apt/apt.conf.d/80-retries && echo 'Acquire::http::Timeout "30";' >> /etc/apt/apt.conf.d/80-retries && echo 'Acquire::https::Timeout "30";' >> /etc/apt/apt.conf.d/80-retries && apt-get update && apt-get install -y --no-install-recommends ca-certificates curl fontconfig fonts-noto-cjk wget xvfb libglib2.0-0 libpango-1.0-0 libcairo2 libgdk-pixbuf-2.0-0 libffi8 shared-mime-info libpangoft2-1.0-0 libharfbuzz0b libfribidi0 && if [ -z "$TARGETARCH" ] || [ "$TARGETARCH" = "amd64" ]; then PANDOC_ARCH="amd64"; elif [ "$TARGETARCH" = "arm64" ]; then PANDOC_ARCH="arm64"; else echo "Unsupported architecture: $TARGETARCH, using amd64"; PANDOC_ARCH="amd64"; fi && echo "Building for architecture: $TARGETARCH (PANDOC_ARCH=$PANDOC_ARCH)" && PANDOC_URL="https://github.com/jgm/pandoc/releases/download/3.8.2.1/pandoc-3.8.2.1-1-${PANDOC_ARCH}.deb" && echo "Downloading pandoc from: $PANDOC_URL" && if wget --no-verbose --tries=3 --timeout=30 "$PANDOC_URL" -O /tmp/pandoc.deb; then dpkg -i /tmp/pandoc.deb || (apt-get install -f -y && dpkg -i /tmp/pandoc.deb); rm -f /tmp/pandoc.deb; echo "Pandoc installed successfully"; else echo "WARNING: Failed to download pandoc from GitHub, trying apt install..." && apt-get install -y --no-install-recommends pandoc || echo "WARNING: pandoc installation failed, continuing without it"; fi && apt-get install -y --no-install-recommends wkhtmltopdf && fc-cache -fv && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-02-07 08:59:15 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-02-07 08:59:15 0.00B 设置环境变量 PYTHONDONTWRITEBYTECODE PYTHONUNBUFFERED PIP_NO_CACHE_DIR TZ
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PIP_NO_CACHE_DIR=1 TZ=Asia/Shanghai
# 2026-02-07 08:59:15 0.00B 定义构建参数
ARG COMPILE_DIR=docker/build/compiled
# 2026-02-07 08:59:15 0.00B 定义构建参数
ARG TARGETARCH=amd64
# 2026-02-05 04:31:09 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-02-05 04:31:09 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-02-05 04:31:09 42.88MB 执行命令并创建新的镜像层
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; rm -rf /var/lib/apt/lists/*; 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-02-05 04:15:27 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=c8f4a596572201d81dd7df91f70e177e19a70f1d489968b54b5fbbf29a97c076
# 2026-02-05 04:15:27 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.10.19
# 2026-02-05 04:15:27 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D
# 2026-02-05 04:15:27 9.26MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; rm -rf /var/lib/apt/lists/* # buildkit
# 2026-02-05 04:15:27 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-02-05 04:15:27 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-02-02 08:00:00 74.81MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1769990400'
镜像信息
{
"Id": "sha256:eab412c463d54bd5f5132d5b1a50d8ed47f49e3162a1f2ed0619e4e964f25044",
"RepoTags": [
"hsliup/tradingagents-pro-backend:latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hsliup/tradingagents-pro-backend:latest"
],
"RepoDigests": [
"hsliup/tradingagents-pro-backend@sha256:f427638150814f5827669e550edcf6bf1f9ae4b99093c36c0c8a9f68b7b7bfa8",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hsliup/tradingagents-pro-backend@sha256:d642fd9daac569dd35477ba165d6aae847bbdfaf25854e996c216fd531e9409f"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-02-10T03:46:31.848208379Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8000/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/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.10.19",
"PYTHON_SHA256=c8f4a596572201d81dd7df91f70e177e19a70f1d489968b54b5fbbf29a97c076",
"PYTHONDONTWRITEBYTECODE=1",
"PYTHONUNBUFFERED=1",
"PIP_NO_CACHE_DIR=1",
"TZ=Asia/Shanghai",
"DOCKER_CONTAINER=true"
],
"Cmd": [
"python",
"-m",
"uvicorn",
"app.main:app",
"--host",
"0.0.0.0",
"--port",
"8000"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"/usr/local/bin/docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 2021119724,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/c5442e2032c78f33f3b948903a88f17fcf1e399e56a78a17bffe3b3005642b3a/diff:/var/lib/docker/overlay2/41a943033612df08efcb510b9f28348b72a1ab7c6433a46af70de3cfa1cffe19/diff:/var/lib/docker/overlay2/ebeddd6646c08406844a23cb6cf97ac5e57837e166d8842b376530aafb4ce941/diff:/var/lib/docker/overlay2/952f2596518bf95dfff0e92de7d2e36d8e7ff47dd5a1f078909328701af8e029/diff:/var/lib/docker/overlay2/b63434cf3233a58ec138f09adb00f26a06a371eb783ad412e1612ab893f3f814/diff:/var/lib/docker/overlay2/a6c706c586cb1de060e6cc45cd875908b24496e4b81ed7293eb7350d27dc4941/diff:/var/lib/docker/overlay2/871a0cfc5385a85fae2dbe5f73002fccb1de6d70e1d37b7aac3a93450f56cecc/diff:/var/lib/docker/overlay2/a14cab25dc58235418ba7ed7b412aa7f2f3a375f73a0e5c7738b54525cc98540/diff:/var/lib/docker/overlay2/8aa1bd40bd67eaee68ed09e32de296725585c1c874bb424479c650df7f03f281/diff:/var/lib/docker/overlay2/5dd41129d30588d0fa044b7cc592cc2323607542b266830d3c5f5819b42012a9/diff:/var/lib/docker/overlay2/dc6b967226e32681a7aa8d8a6a01d400314cbe11cc5f6f7e390eaa4d01d5b321/diff:/var/lib/docker/overlay2/4ba3e6b6732a0970d3e3b888ca57e8db09f25b593f28442b7c417cf879148fda/diff:/var/lib/docker/overlay2/96231d198ec67859d2ab466868ff11f563206551c6bf5b9a55eba91d2856a8f7/diff:/var/lib/docker/overlay2/693ffb7e29a7122f46244e0bb141df90c2823190f599b9bf5d1a1ac8ff5a6976/diff:/var/lib/docker/overlay2/e58da5223af3bdc2ef9b76f75e7bd1fb1f0fdc84cbe3266fa6bc167df0bb9df9/diff:/var/lib/docker/overlay2/8e76bd7a0a043e4df2154516a1471133f9d8223af3f64749b8c625c72705168d/diff:/var/lib/docker/overlay2/55e148ef2596cec44f476f800db4f5b450161304d827ebdc936f48d61720f592/diff:/var/lib/docker/overlay2/f098b3a086195b8627c237f8863240f2ee491a40b984091accffb233d86f3bc5/diff:/var/lib/docker/overlay2/2a8ac938f9b919072e3f22a6e5f7665cc369619ea76f25c7a9d02a261d32ada9/diff:/var/lib/docker/overlay2/a37951ade2db2b9f2862e7d5292aee8298bd317b9e427b09b565444962639344/diff",
"MergedDir": "/var/lib/docker/overlay2/f4c36736a574561620e7c4db6049039007bcdf38c19a1540624e89fc03a473db/merged",
"UpperDir": "/var/lib/docker/overlay2/f4c36736a574561620e7c4db6049039007bcdf38c19a1540624e89fc03a473db/diff",
"WorkDir": "/var/lib/docker/overlay2/f4c36736a574561620e7c4db6049039007bcdf38c19a1540624e89fc03a473db/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:e48af84b2108a5d73effd9e16685b42ac33e7994e606398c46690918f5f3604a",
"sha256:b99979c554d5f2d69cbadc58ddd93437ce6bba42863814753b116dd758762b98",
"sha256:610f49db37ce8ce269e8a43b08d4e085c557ca602e606309e87117a442056a7a",
"sha256:befbd9e6a6268264d6f28e67fc71ae3b37bdcdf605919d86f16656e1cf8ca56a",
"sha256:b4e2539a7880a557312106d8382e65c0c7fbef486110d52018b393a2f5532afd",
"sha256:097ad67c9037ed81dca2836780254ea7b0eba1234f8d4925f120e8aef01798b6",
"sha256:0fcf35447f1298118288ab36c4c77bb3a08c52f7b3fea14fa88ca5171dc2135c",
"sha256:bd0631943434d6fe3f461123f3e20ee32c489a423b8df39a24dfe2e494f97b4c",
"sha256:bfece50892f4a1fe4ea6da72aa0a3cce01c9208fa914cf1313168cf7cfbf6550",
"sha256:23e4c29124640f56f8dc21fa883891b092576b43cb4bfdca3d0ad94430723700",
"sha256:342df043e9a8b0f41f1f27e3a4d57a54b81788f08498b4b9d8c23909f2e00cca",
"sha256:99f28c4264d13310abcaac7c1387d21d5af7a081e64d3cea8df1edecb7fc8462",
"sha256:3805336085bc008b6ed576051a4ee3320ebd1cd49c00fabd48547b1efaaba917",
"sha256:9ece6b11d9f4c584f7a8d6a34458e722b14a2944bd1c76947cea966ecdeab648",
"sha256:330498dbecfe822426dd7a65304023f1885a2f9e0683af785fb3af5a142a2da1",
"sha256:d506b73dd862aed7211e28682879111ed050ab1487d8f3461d4ee09a05dc731b",
"sha256:698ebc42683fee30292c9c75ca66973ee67ba44979f9326cf9e4c3fa9847c4aa",
"sha256:8c1bcb596c6fa8f594b5a9f90b903168c5f506e120e11b225a79597bc3b21c13",
"sha256:a1648a3d440f45e6881c74580db918af2c19ccf4aeaca6d9888461bbae773472",
"sha256:653de8d7dc233cf184e7d86f4b1c59f2cc8c05943c674ff28f0610a62fcc0e0a",
"sha256:772589b0d7f03da846f3cf4fc026289d0861e902e1b03e4b458c3f64689fa44b"
]
},
"Metadata": {
"LastTagTime": "2026-02-24T17:51:46.884185471+08:00"
}
}