镜像构建历史
# 2026-01-22 09:27:02 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/app/entrypoint.sh"]
# 2026-01-22 09:27:02 0.00B 指定检查容器健康状态的命令
HEALTHCHECK &{["CMD-SHELL" "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8000/health')\" || exit 1"] "30s" "10s" "5s" "0s" '\x03'}
# 2026-01-22 09:27:02 0.00B 设置环境变量 SENTENCE_TRANSFORMERS_HOME
ENV SENTENCE_TRANSFORMERS_HOME=/app/embedding
# 2026-01-22 09:27:02 0.00B 设置环境变量 HF_HUB_OFFLINE
ENV HF_HUB_OFFLINE=1
# 2026-01-22 09:27:02 0.00B 设置环境变量 HF_DATASETS_OFFLINE
ENV HF_DATASETS_OFFLINE=1
# 2026-01-22 09:27:02 0.00B 设置环境变量 TRANSFORMERS_OFFLINE
ENV TRANSFORMERS_OFFLINE=1
# 2026-01-22 09:27:02 0.00B 设置环境变量 APP_PORT
ENV APP_PORT=8000
# 2026-01-22 09:27:02 0.00B 设置环境变量 APP_HOST
ENV APP_HOST=0.0.0.0
# 2026-01-22 09:27:02 0.00B 设置环境变量 PYTHONUNBUFFERED
ENV PYTHONUNBUFFERED=1
# 2026-01-22 09:27:02 0.00B 声明容器运行时监听的端口
EXPOSE [8000/tcp]
# 2026-01-22 09:27:02 0.00B 执行命令并创建新的镜像层
RUN /bin/sh -c mkdir -p /app/data /app/logs # buildkit
# 2026-01-22 09:27:01 2.77KB 执行命令并创建新的镜像层
RUN /bin/sh -c chmod +x /app/entrypoint.sh # buildkit
# 2026-01-22 09:27:01 0.00B 复制新文件或目录到容器中
COPY backend/scripts/migrate.py ./scripts/migrate.py # buildkit
# 2026-01-22 09:27:01 2.77KB 复制新文件或目录到容器中
COPY backend/scripts/entrypoint.sh /app/entrypoint.sh # buildkit
# 2026-01-22 09:27:01 63.31KB 复制新文件或目录到容器中
COPY backend/alembic/postgres ./alembic # buildkit
# 2026-01-22 09:27:01 1.05KB 复制新文件或目录到容器中
COPY backend/alembic-postgres.ini ./alembic.ini # buildkit
# 2026-01-22 09:27:01 3.43MB 复制新文件或目录到容器中
COPY /frontend/dist ./static # buildkit
# 2026-01-22 09:27:00 481.41MB 复制新文件或目录到容器中
COPY backend/ ./ # buildkit
# 2026-01-22 09:26:58 739.05MB 执行命令并创建新的镜像层
RUN /bin/sh -c pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # buildkit
# 2026-01-22 09:00:06 556.19MB 执行命令并创建新的镜像层
RUN /bin/sh -c pip install --no-cache-dir torch==2.7.0 --index-url https://download.pytorch.org/whl/cpu # buildkit
# 2026-01-22 08:40:07 790.00B 复制新文件或目录到容器中
COPY backend/requirements.txt ./ # buildkit
# 2026-01-22 08:40:06 245.13MB 执行命令并创建新的镜像层
RUN /bin/sh -c apt-get update && apt-get install -y gcc postgresql-client netcat-traditional && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-01-22 08:29:48 445.00B 执行命令并创建新的镜像层
RUN /bin/sh -c sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources # buildkit
# 2026-01-22 08:29:47 0.00B 设置工作目录为/app
WORKDIR /app
# 2026-01-13 11:22:25 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-01-13 11:22:25 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-01-13 11:22:25 45.31MB 执行命令并创建新的镜像层
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-01-13 11:11:19 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=8d3ed8ec5c88c1c95f5e558612a725450d2452813ddad5e58fdb1a53b1209b78
# 2026-01-13 11:11:19 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.11.14
# 2026-01-13 11:11:19 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D
# 2026-01-13 11:11:19 3.86MB 执行命令并创建新的镜像层
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-01-13 11:11:19 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-01-13 11:11:19 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-01-12 08:00:00 100.49MB
# debian.sh --arch 'arm64' out/ 'trixie' '@1768176000'
镜像信息
{
"Id": "sha256:35590c85905b8ec9892d0dc114d818efd92e9f02e39196a03c4fd8886d51c0ca",
"RepoTags": [
"mumujie/mumuainovel:1.3.1",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mumujie/mumuainovel:1.3.1-linuxarm64"
],
"RepoDigests": [
"mumujie/mumuainovel@sha256:6e73cdb49de9e23102851ad8426d422033f2945e5404871b7f95bf63aad57ed1",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mumujie/mumuainovel@sha256:958b5714e6bdebae27c328e2d3a829448e3923a792a7aa9db88bb2e923f241c8"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-01-22T01:27:02.363661407Z",
"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.14",
"PYTHON_SHA256=8d3ed8ec5c88c1c95f5e558612a725450d2452813ddad5e58fdb1a53b1209b78",
"PYTHONUNBUFFERED=1",
"APP_HOST=0.0.0.0",
"APP_PORT=8000",
"TRANSFORMERS_OFFLINE=1",
"HF_DATASETS_OFFLINE=1",
"HF_HUB_OFFLINE=1",
"SENTENCE_TRANSFORMERS_HOME=/app/embedding"
],
"Cmd": null,
"Healthcheck": {
"Test": [
"CMD-SHELL",
"python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8000/health')\" || exit 1"
],
"Interval": 30000000000,
"Timeout": 10000000000,
"StartPeriod": 5000000000,
"Retries": 3
},
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"/app/entrypoint.sh"
],
"OnBuild": null,
"Labels": null
},
"Architecture": "arm64",
"Os": "linux",
"Size": 2174938229,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/6e0f5af973e8f831608adf1dfa1ad1057e0ef8e225247f1f6a95fe3380ae3cbe/diff:/var/lib/docker/overlay2/2f8083cc2d73ac07c0b24b8d79626ca9e30a3453a4eeaa3ba78681b56b59d109/diff:/var/lib/docker/overlay2/da88cb52ed48f11f7b58fdd9493f9e76725a821832580e69ad0b4611cfab1d05/diff:/var/lib/docker/overlay2/b38243b8c0c16bf508ce9b5757a6b1bf1a9f8b0793d2a1212d937ebdffc13515/diff:/var/lib/docker/overlay2/130cb62434b063a64cd7661c1505a38c3c7abbaca641cee118a5355f1c82008c/diff:/var/lib/docker/overlay2/d01dea32d7c635fa0ae7feb9ec62a5b49708ecb52b252b03124d3705c2df6296/diff:/var/lib/docker/overlay2/7ba60772fbd4ce9e2ee85bdd402fdf6427643e69e01d9f6d7f9b54292cdeee68/diff:/var/lib/docker/overlay2/3a04e4d9d685892c55546e37877c8dd369cd09b52292a690d923c76ec6b09bdc/diff:/var/lib/docker/overlay2/753aa7f3e61f0c01e98adcd36dff03f3aeb3a51f4b529f6e9b789e6ad8c69660/diff:/var/lib/docker/overlay2/64ac867b1532070515d6278f8f262b244bc5041c50308767dd137261f4718736/diff:/var/lib/docker/overlay2/c729df3f2239149bf876c2ae82d1041cdd2db8a61c2a01ab0af05342be40bcc5/diff:/var/lib/docker/overlay2/8f608bd1684b7c24efe780174a22dcceeda3b7e94f7602465b1b7b2fd908128a/diff:/var/lib/docker/overlay2/a7e3be66b02a4af8a3a855c18f189f1c9c0114bb95c001a5f9119c8bcad93658/diff:/var/lib/docker/overlay2/6ed507274f9d0c361a148e519b8842d619641d853da418c0fb86188dc53fe4f1/diff:/var/lib/docker/overlay2/7e756e6470d739f661f9b807c189e1dc5aece7f0f8170549f20f2b428f6ecb57/diff:/var/lib/docker/overlay2/bbab744dc5d7a77d2ef5339e412624635f921e003c460656d377f5c7123e695a/diff:/var/lib/docker/overlay2/4a4371150d30f357a9b01b2a98698caf5700b8df31aa56b8101608a0ed275b75/diff",
"MergedDir": "/var/lib/docker/overlay2/8cb8cc42f05f3c4689ff9897aa19190a3cb1f18a58f913974888304358ad19cc/merged",
"UpperDir": "/var/lib/docker/overlay2/8cb8cc42f05f3c4689ff9897aa19190a3cb1f18a58f913974888304358ad19cc/diff",
"WorkDir": "/var/lib/docker/overlay2/8cb8cc42f05f3c4689ff9897aa19190a3cb1f18a58f913974888304358ad19cc/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:37127a0fa4c7aa2f661f5d88d5e0b6194640848159d7a56c5c0b7afb445aa6fe",
"sha256:188b50d8162b3c8f2344405d945edec23d0df7cfdbfb0f84a93c6b594370635d",
"sha256:76c58cdecda345616a540fab44c01997ffe8e7bc5512af85f0e8c098c56e6506",
"sha256:14560f658b88d5fb91290dd331aa074e018f33d071eec469bf220560f7aba427",
"sha256:571568d9688f69ff0f61e3c53e6fae540a023f8a03c7d14adc5547ee06630918",
"sha256:49866b0e5aefcce470c9f598ea8b03966fa2a66a088b97884b6ce105c7704a6e",
"sha256:e23b2195e58bc638a3abad4d15232d13a7d298f498d1a18fc5cda7bc9f0ca923",
"sha256:7553a54e20b6cf24961ce49f8fb4556da9a06a7aeea7e6ad23ba80c586e24f14",
"sha256:3d12c2dcf0d282bc040f34214d6269c1423c4cd19fc42c22a4ba15cac33091af",
"sha256:5c171e955ec9671f1c5f0fba6f665c058b4f9cf7e5a55cd56badc17b65a5e74f",
"sha256:f8dc4f92db045ceafcff9d2cb150b5a70a5cd63683c7b51cee480aa9198d76f8",
"sha256:c97be8c3acc18c9eb404815c1cd4c05aa114c820fb1f3c9a4ebb8eedd9d09586",
"sha256:ab9cb6b3b34c8b6776cf526f699295b52063edc443e7206e9d2752c5133dbd00",
"sha256:3d820a1120b26d784eb83e33d6fc91139a68e9a8337bcd33b2f26e9cd12e0889",
"sha256:418acdf86294fcacb17ead9e4e66061377bd2dab127b9d720c685f243307065f",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:8c12e9d4711277c9a33575c974e051da31059c94b9da985a73c4a301f85a959c",
"sha256:d1b7e8f5d21d3c588e8e4de69bafca2374d39c2a0b0a2ffde2f11ca4839f7192"
]
},
"Metadata": {
"LastTagTime": "2026-01-23T20:34:47.024349868+08:00"
}
}