镜像构建历史
# 2026-05-31 23:38:29 0.00B 设置默认要执行的命令
CMD ["python" "server.py"]
# 2026-05-31 23:38:29 0.00B 指定检查容器健康状态的命令
HEALTHCHECK {Test:[CMD-SHELL python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/health')" || exit 1] Interval:30s Timeout:10s StartPeriod:5s StartInterval:0s Retries:3}
# 2026-05-31 23:38:29 0.00B 声明容器运行时监听的端口
EXPOSE [8000/tcp]
# 2026-05-31 23:38:29 0.00B 设置环境变量 TZ
ENV TZ=Asia/Shanghai
# 2026-05-31 23:38:29 0.00B 设置环境变量 DOCKER
ENV DOCKER=1
# 2026-05-31 23:38:29 0.00B 设置环境变量 DATA_DIR
ENV DATA_DIR=/app/data
# 2026-05-31 23:38:29 0.00B 设置环境变量 PYTHONUNBUFFERED
ENV PYTHONUNBUFFERED=1
# 2026-05-31 23:38:29 0.00B 执行命令并创建新的镜像层
RUN |1 VERSION=0.8.5 /bin/sh -c mkdir -p /app/data # buildkit
# 2026-05-31 23:38:29 1.03MB 复制新文件或目录到容器中
COPY /app/frontend/dist ./static/ # buildkit
# 2026-05-31 23:38:29 6.00B 执行命令并创建新的镜像层
RUN |1 VERSION=0.8.5 /bin/sh -c echo "${VERSION}" > VERSION # buildkit
# 2026-05-31 23:38:29 15.94KB 复制新文件或目录到容器中
COPY prompts/ ./prompts/ # buildkit
# 2026-05-31 23:38:29 46.56KB 复制新文件或目录到容器中
COPY server.py ./ # buildkit
# 2026-05-31 23:38:29 2.54MB 复制新文件或目录到容器中
COPY src/ ./src/ # buildkit
# 2026-05-31 23:38:29 639.62MB 执行命令并创建新的镜像层
RUN |1 VERSION=0.8.5 /bin/sh -c pip install --no-cache-dir -r requirements.txt # buildkit
# 2026-05-31 23:37:20 654.00B 复制新文件或目录到容器中
COPY requirements.txt ./ # buildkit
# 2026-05-31 23:37:20 484.49MB 执行命令并创建新的镜像层
RUN |1 VERSION=0.8.5 /bin/sh -c apt-get update && apt-get install -y --no-install-recommends tzdata git fonts-noto-cjk libxcursor1 libgtk-3-0 libpangocairo-1.0-0 libcairo-gobject2 libgdk-pixbuf-2.0-0 libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 libpango-1.0-0 libcairo2 libx11-6 libx11-xcb1 libxcb1 libxext6 libxi6 libxrender1 libxss1 libxtst6 libxshmfence1 libegl1 libfontconfig1 libglib2.0-0 && rm -rf /var/lib/apt/lists/* && fc-cache -fv # buildkit
# 2026-05-31 23:36:45 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-05-31 23:36:45 0.00B 定义构建参数
ARG VERSION=0.8.5
# 2026-05-20 07:52:06 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-05-20 07:52:06 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-05-20 07:52:06 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-05-20 07:43:52 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625
# 2026-05-20 07:43:52 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.11.15
# 2026-05-20 07:43:52 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D
# 2026-05-20 07:43:52 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-05-20 07:43:52 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-05-20 07:43:52 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-05-18 08:00:00 78.62MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1779062400'
镜像信息
{
"Id": "sha256:5e915dee84d60428731cc16f8054c3ac8897d07e12fc6ae7e4a62166f754891b",
"RepoTags": [
"sunxiao0721/panwatch:0.8.5",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/sunxiao0721/panwatch:0.8.5"
],
"RepoDigests": [
"sunxiao0721/panwatch@sha256:f3f7598e0ac180b6dac0c5cf6822b749eb2f84a74e24d9122067c410058c6a7f",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/sunxiao0721/panwatch@sha256:9a9c735fd59c321791d3595f4be8cf040f0ef14b945ad0b3435408741b4f40d7"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-05-31T15:38:29.617447058Z",
"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.11.15",
"PYTHON_SHA256=272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625",
"PYTHONUNBUFFERED=1",
"DATA_DIR=/app/data",
"DOCKER=1",
"TZ=Asia/Shanghai"
],
"Cmd": [
"python",
"server.py"
],
"Healthcheck": {
"Test": [
"CMD-SHELL",
"python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8000/api/health')\" || exit 1"
],
"Interval": 30000000000,
"Timeout": 10000000000,
"StartPeriod": 5000000000,
"Retries": 3
},
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2026-05-31T15:36:39.214Z",
"org.opencontainers.image.description": "盯盘侠 - AI 驱动的股票监控助手,支持 A 股/港股/美股,多账户持仓管理,智能 Agent 自动分析,PWA 移动端适配",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.revision": "7e03577c91ebfcc626baebd3006ef188b7cb3cc2",
"org.opencontainers.image.source": "git://github.com/TNT-Likely/PanWatch.git",
"org.opencontainers.image.title": "PanWatch",
"org.opencontainers.image.url": "https://github.com/TNT-Likely/PanWatch",
"org.opencontainers.image.version": "0.8.5"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1252220416,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/fe434dae0c2feb5006ae0a7a47728dfc3822780ec80844115c38703baaaea3a5/diff:/var/lib/docker/overlay2/1de3fcc1c2178025de0972729d69eff405a45702b4886ce4c9ddfe0ee6416c36/diff:/var/lib/docker/overlay2/53617c69d4b29c212ee020fee4eb2f3a3c27b6f4d0516ad45ca106fc07293d77/diff:/var/lib/docker/overlay2/77bda1e8cff47a907185ccfc7804d00b12b1b27e28ab9a1d24880a6d563067a2/diff:/var/lib/docker/overlay2/9c230d4dec3b02d9eb7613921c40d0c8dbb2082d477384cc8e0a209bd0ecde18/diff:/var/lib/docker/overlay2/ff7444985fa4eaf94d87869de760d185756c330948ee62731e3170e44cebd471/diff:/var/lib/docker/overlay2/60502b253ae90d5ccfb2e7043ec1edc7d6f890d3fdce413d55c4ecdefbf5eede/diff:/var/lib/docker/overlay2/7b611dbcd6c36c30966787082e3e539fca9d29c0d11cbd1b6e9765f0be0c3519/diff:/var/lib/docker/overlay2/41527a927277df569e7b5658c0b0b79837c6f026ff25fb385800435426224f84/diff:/var/lib/docker/overlay2/97c6e32f971d153cfa6f93d0f59773c9d879ec67bd27dc30f66c5cea43874886/diff:/var/lib/docker/overlay2/d56e40da9769eb7ecd235d012dd5cf28ca40c25f13a56075884fdcd6cfbd90a3/diff:/var/lib/docker/overlay2/1195f6999f770996df5aebe24e6459f7d0c199c32cd31b53f4fc93b79eb2fb24/diff:/var/lib/docker/overlay2/cd0bbc9c69e026633d38a0c4693c779a3d10a0542c78032cd6cc9dbe54fe597d/diff",
"MergedDir": "/var/lib/docker/overlay2/8f9ff084ae7af3028450f75661171ad30e884885f2ba5ae0f3e5d2fa8862299b/merged",
"UpperDir": "/var/lib/docker/overlay2/8f9ff084ae7af3028450f75661171ad30e884885f2ba5ae0f3e5d2fa8862299b/diff",
"WorkDir": "/var/lib/docker/overlay2/8f9ff084ae7af3028450f75661171ad30e884885f2ba5ae0f3e5d2fa8862299b/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:219a998c60509502b47b97f1158067d5dd62640d2d689560d32cfd5594f6bc40",
"sha256:98df1ca0e575d9026c1abd12994fad3c14effa4558d50b6961fd586930956b26",
"sha256:bffa3c30a00bb534b2e3637bd26d9a75e095172be7d0b33924f1a61bf6cb2120",
"sha256:89bfb82659d056dd4ef25b8b3f99c7a97874083d86d92924e931ffa2fb7c7861",
"sha256:d3713a2307697f4d1be759e138a770a08872cf02f6d93f7ebfe2ed1c0d96d740",
"sha256:e3a6c37a84689b2f1331eb07516e555eaa4aa1b9983cb174a19c7a403bb55457",
"sha256:1de08662998e6970bab507c4da957c6426528800189543eb9ade39bd952a11d0",
"sha256:18a4d3c2854cbbd80c1b44e59a36ea84f083156b2551495b28d04c8cec1f5f8a",
"sha256:61e87b7dce2fa29c0c5892ced04723a06bd1e8855c62afab8bfed401edef7151",
"sha256:81bda1eceaa7496cda7297845e147d91c9a72ba011dd199fd746222ea21f2098",
"sha256:05b2eb68bb4ce8492744ed44b13a7e6971585071cfebf7dececd6e1b7d8b8735",
"sha256:63b16e2b5fcd98342f0d9f988fcadb5509910f17bf2788752afc9b65e7e4ece4",
"sha256:869246f6dc2d07e99eff18bbf347392e34602276a4be871daf327a3c287cf00c",
"sha256:548d33fd8a7f8ddee6729072ee8e3133bcba48572a70e1f7fc1d88edef928260"
]
},
"Metadata": {
"LastTagTime": "2026-06-16T23:36:16.929821293+08:00"
}
}