镜像构建历史
# 2026-08-07 11:13:03 0.00B 设置默认要执行的命令
CMD ["/app/start.sh"]
# 2026-08-07 11:13:03 0.00B 指定检查容器健康状态的命令
HEALTHCHECK {Test:[CMD-SHELL curl -f http://localhost:5757/ || exit 1] Interval:30s Timeout:10s StartPeriod:1m0s StartInterval:0s Retries:3}
# 2026-08-07 11:13:03 0.00B 声明容器运行时监听的端口
EXPOSE [5757/tcp]
# 2026-08-07 11:13:03 12.29KB 执行命令并创建新的镜像层
RUN |2 APP_VERSION=dev-937 INSTALL_GPU=false /bin/sh -c sed -i 's/\r$//' /app/start.sh && chmod +x /app/start.sh # buildkit
# 2026-08-07 11:13:03 12.29KB 复制新文件或目录到容器中
COPY start.sh /app/start.sh # buildkit
# 2026-08-07 11:13:03 282.62KB 复制新文件或目录到容器中
COPY plugins/ /app/plugins/ # buildkit
# 2026-08-07 11:13:03 16.38KB 复制新文件或目录到容器中
COPY alembic.ini /app/alembic.ini # buildkit
# 2026-08-07 11:13:03 208.90KB 复制新文件或目录到容器中
COPY alembic/ /app/alembic/ # buildkit
# 2026-08-07 11:13:03 1.90MB 复制新文件或目录到容器中
COPY static/ /app/static/ # buildkit
# 2026-08-07 11:13:03 626.69KB 复制新文件或目录到容器中
COPY templates/ /app/templates/ # buildkit
# 2026-08-07 11:13:03 2.70MB 复制新文件或目录到容器中
COPY src/ /app/src/ # buildkit
# 2026-08-07 11:13:03 36.86KB 执行命令并创建新的镜像层
RUN |2 APP_VERSION=dev-937 INSTALL_GPU=false /bin/sh -c mkdir -p /app/src /app/templates /app/static /data/audio_cache /data/logs /data/transcripts # buildkit
# 2026-08-07 11:13:02 569.65MB 执行命令并创建新的镜像层
RUN |2 APP_VERSION=dev-937 INSTALL_GPU=false /bin/sh -c pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir -r /app/requirements.txt && if [ "$INSTALL_GPU" = "true" ]; then pip install --no-cache-dir nvidia-cublas-cu12 nvidia-cudnn-cu12; fi # buildkit
# 2026-08-07 11:12:45 0.00B 定义构建参数
ARG INSTALL_GPU=false
# 2026-08-07 11:12:45 12.29KB 复制新文件或目录到容器中
COPY requirements.txt /app/requirements.txt # buildkit
# 2026-08-07 11:12:45 461.32MB 执行命令并创建新的镜像层
RUN |1 APP_VERSION=dev-937 /bin/sh -c apt-get update && apt-get install -y --no-install-recommends ffmpeg libavcodec-extra curl && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-08-05 22:23:10 0.00B 设置环境变量 APP_VERSION
ENV APP_VERSION=dev-937
# 2026-08-05 22:23:10 0.00B 定义构建参数
ARG APP_VERSION=dev-937
# 2026-08-05 22:23:10 8.19KB 设置工作目录为/app
WORKDIR /app
# 2026-08-05 22:23:10 0.00B 设置环境变量 PYTHONUNBUFFERED PYTHONDONTWRITEBYTECODE FLASK_APP PYTHONPATH LD_LIBRARY_PATH
ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 FLASK_APP=web_server.py PYTHONPATH=/app LD_LIBRARY_PATH=:/usr/local/lib/python3.11/site-packages/nvidia/cublas/lib:/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib
# 2026-08-05 09:12:29 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-08-05 09:12:29 16.38KB 执行命令并创建新的镜像层
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-08-05 09:12:29 48.80MB 执行命令并创建新的镜像层
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.3' ; pip3 --version # buildkit
# 2026-08-05 09:05:13 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625
# 2026-08-05 09:05:13 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.11.15
# 2026-08-05 09:05:13 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D
# 2026-08-05 09:05:13 4.94MB 执行命令并创建新的镜像层
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-08-05 09:05:13 0.00B 设置环境变量 LANG
ENV LANG=C.UTF-8
# 2026-08-05 09:05:13 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-08-03 08:00:00 87.42MB
# debian.sh --arch 'amd64' out/ 'trixie' '@1785715200'
镜像信息
{
"Id": "sha256:41800e2700c7d5544db233b12e3f3779b346fc2898d124437cd65b98982a09f0",
"RepoTags": [
"ghcr.io/cporcellijr/bookbridge:dev-937",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/cporcellijr/bookbridge:dev-937"
],
"RepoDigests": [
"ghcr.io/cporcellijr/bookbridge@sha256:41800e2700c7d5544db233b12e3f3779b346fc2898d124437cd65b98982a09f0",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/cporcellijr/bookbridge@sha256:41800e2700c7d5544db233b12e3f3779b346fc2898d124437cd65b98982a09f0"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-08-07T03:13:03.412409324Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"5757/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",
"PYTHONDONTWRITEBYTECODE=1",
"FLASK_APP=web_server.py",
"PYTHONPATH=/app",
"LD_LIBRARY_PATH=:/usr/local/lib/python3.11/site-packages/nvidia/cublas/lib:/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib",
"APP_VERSION=dev-937"
],
"Cmd": [
"/app/start.sh"
],
"Healthcheck": {
"Test": [
"CMD-SHELL",
"curl -f http://localhost:5757/ || exit 1"
],
"Interval": 30000000000,
"Timeout": 10000000000,
"StartPeriod": 60000000000,
"Retries": 3
},
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.opencontainers.image.created": "2026-08-07T03:11:47.486Z",
"org.opencontainers.image.description": "The missing link between your ears and your eyes. Seamlessly sync your reading progress between Audiobookshelf (Audiobooks) and KOReader/KoSync (Ebooks). Start listening in the car, and pick up exactly where you left off on your Kindle or Kobo.",
"org.opencontainers.image.licenses": "MIT",
"org.opencontainers.image.revision": "03ff7ce821239ae6fbc684326e7d2b172db073a6",
"org.opencontainers.image.source": "https://github.com/cporcellijr/bookbridge",
"org.opencontainers.image.title": "bookbridge",
"org.opencontainers.image.url": "https://github.com/cporcellijr/bookbridge",
"org.opencontainers.image.version": "dev"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 389995550,
"GraphDriver": {
"Data": null,
"Name": "overlayfs"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:6f94328331290cbd81edab450664d42da7b64c191416c9346cd5d28c84f76035",
"sha256:6c3d72b3145b3e6fd1cb9f40bec451653da28422c27bd821f217cffbf8e2ce56",
"sha256:801c4088600fc9b873e1c1e87708adfce646f06b31d533588ee4781bc917b8ed",
"sha256:d2505f5a762d70dc386767149afedd28f8d33c71d0aa8ad88a71bd71940ffe01",
"sha256:8ce009f5ef557316b136ff1034cc11df9593ff5a39bec4cc2853f91fbf96cc48",
"sha256:1c6348ca8bc6f0440f2057f39ac406a1e57b77e25e869fe11ee0cc0ad0b843bd",
"sha256:ff67bb0d6fa579048f6f95425b51297780463b17a78d1f719ef215f5ee257785",
"sha256:63aa4febf9ca0578449ed752158d004401e333afd93d89ad54e4baed33dbdb61",
"sha256:d9f92f1b5b7079ce453c482058386aac7dd735265367a354820b3bf3a3f82527",
"sha256:a0ed120dc25bd3f199cad50f9672a44b44af02c1c17ff38037ea00d34dfa1f9e",
"sha256:1f6d9485df0343c0303b95fc3fd5bf549046051463e9e000b2f6629de66d4070",
"sha256:6d7e11a3a152f665fd8cc8bc0fe20f743a230a5e0eb174234966575d5eb8d4b3",
"sha256:4873ca4473342e5e14e76ac8f236823941446ed2d68c9c9e00ddd19bca7ef06c",
"sha256:6bc442c24c0d5d8ba2876eb022fd2466b98b39e503518fe6dbca8a1144985288",
"sha256:25372575c6d4e1259323538e5ab2707b89b072b8f8730edfdb84055bd8a849ed",
"sha256:f473995f214519f73a3a929fae79347f6bb3d51efa7b074f8cd129fa49400834",
"sha256:3945444d42b684871ccec5de2953ea34278e67b3c2dbb3951d82b1ca3f0afd47"
]
},
"Metadata": {
"LastTagTime": "2026-08-07T09:44:17.443270243Z"
}
}