镜像构建历史
# 2026-05-02 13:12:16 0.00B 设置默认要执行的命令
CMD ["java" "--enable-native-access=ALL-UNNAMED" "--enable-preview" "-jar" "/app/app.jar"]
# 2026-05-02 13:12:16 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# 2026-05-02 13:12:16 0.00B 声明容器运行时监听的端口
EXPOSE [6060/tcp]
# 2026-05-02 13:12:16 0.00B 定义构建参数
ARG BOOKLORE_PORT=6060
# 2026-05-02 13:12:16 0.00B 设置环境变量 APP_VERSION APP_REVISION
ENV APP_VERSION=v3.0.3 APP_REVISION=08450fa26ad2adab41047032f5defcb13adbae45
# 2026-05-02 13:12:16 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=Grimmory org.opencontainers.image.description=Grimmory: a self-hosted, multi-user digital library with smart shelves, auto metadata, Kobo and KOReader sync, BookDrop imports, OPDS support, and a built-in reader for EPUB, PDF, and comics. org.opencontainers.image.source=https://github.com/grimmory-tools/grimmory org.opencontainers.image.url=https://github.com/grimmory-tools/grimmory org.opencontainers.image.documentation=https://grimmory.org/docs/getting-started org.opencontainers.image.version=v3.0.3 org.opencontainers.image.revision=08450fa26ad2adab41047032f5defcb13adbae45 org.opencontainers.image.licenses=AGPL-3.0 org.opencontainers.image.base.name=docker.io/library/eclipse-temurin:25-jre-alpine
# 2026-05-02 13:12:16 0.00B 定义构建参数
ARG APP_REVISION=08450fa26ad2adab41047032f5defcb13adbae45
# 2026-05-02 13:12:16 0.00B 定义构建参数
ARG APP_VERSION=v3.0.3
# 2026-05-02 13:12:16 117.29MB 复制新文件或目录到容器中
COPY /workspace/backend/app.jar /app/app.jar # buildkit
# 2026-05-01 13:22:51 3.58MB 复制新文件或目录到容器中
COPY /kepubify /usr/local/bin/kepubify # buildkit
# 2026-05-01 13:22:51 139.54MB 复制新文件或目录到容器中
COPY /ffprobe /usr/local/bin/ffprobe # buildkit
# 2026-05-01 13:22:50 1.25KB 执行命令并创建新的镜像层
RUN /bin/sh -c chmod +x /usr/local/bin/entrypoint.sh # buildkit
# 2026-05-01 13:22:50 1.25KB 复制新文件或目录到容器中
COPY packaging/docker/entrypoint.sh /usr/local/bin/entrypoint.sh # buildkit
# 2026-05-01 13:22:50 25.00B 执行命令并创建新的镜像层
RUN /bin/sh -c ln -s /usr/lib/libarchive.so.13 /usr/lib/libarchive.so # buildkit
# 2026-05-01 13:22:50 4.85MB 执行命令并创建新的镜像层
RUN /bin/sh -c apk add --no-cache su-exec libstdc++ libgcc libarchive && mkdir -p /bookdrop # buildkit
# 2026-05-01 13:22:50 0.00B 设置环境变量 JAVA_TOOL_OPTIONS -XX:ShenandoahGCHeuristics -XX:MaxRAMPercentage -XX:InitialRAMPercentage -XX:HeapDumpPath -XX:MaxMetaspaceSize -XX:ReservedCodeCacheSize -XX:CICompilerCount -XX:ShenandoahUncommitDelay -XX:ShenandoahGuaranteedGCInterval -XX:MaxDirectMemorySize
ENV JAVA_TOOL_OPTIONS=-XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact -XX:+UseCompactObjectHeaders -XX:MaxRAMPercentage=60.0 -XX:InitialRAMPercentage=8.0 -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:MaxMetaspaceSize=256m -XX:ReservedCodeCacheSize=48m -Xss512k -XX:CICompilerCount=2 -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication -XX:ShenandoahUncommitDelay=5000 -XX:ShenandoahGuaranteedGCInterval=30000 -XX:MaxDirectMemorySize=256m
# 2026-05-01 07:28:52 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/__cacert_entrypoint.sh"]
# 2026-05-01 07:28:52 5.31KB 复制新文件或目录到容器中
COPY --chmod=755 entrypoint.sh /__cacert_entrypoint.sh # buildkit
# 2026-05-01 07:28:52 0.00B 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; echo "Verifying install ..."; echo "java --version"; java --version; echo "Complete." # buildkit
# 2026-05-01 07:28:52 197.75MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; ARCH="$(apk --print-arch)"; case "${ARCH}" in aarch64) ESUM='48aa0908d9f4d501c1070ebbc8a4da93ca1f066c41ff2e34a22a34dd3ca2dac1'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.3%2B9/OpenJDK25U-jre_aarch64_alpine-linux_hotspot_25.0.3_9.tar.gz'; ;; x86_64) ESUM='ad202c8f8b216800ed0d6581130f92e5680b685ba394ba38e62e7605c3fd9494'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.3%2B9/OpenJDK25U-jre_x64_alpine-linux_hotspot_25.0.3_9.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; apk add --no-cache --virtual .fetch-deps gnupg; wget -O /tmp/openjdk.tar.gz ${BINARY_URL}; wget -O /tmp/openjdk.tar.gz.sig ${BINARY_URL}.sig; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 3B04D753C9050D9A5D343F39843C48A565F8F04B; gpg --batch --verify /tmp/openjdk.tar.gz.sig /tmp/openjdk.tar.gz; rm -rf "${GNUPGHOME}" /tmp/openjdk.tar.gz.sig; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p "$JAVA_HOME"; tar --extract --file /tmp/openjdk.tar.gz --directory "$JAVA_HOME" --strip-components 1 --no-same-owner ; rm -f /tmp/openjdk.tar.gz; apk del --no-network .fetch-deps; # buildkit
# 2026-05-01 07:28:48 0.00B 设置环境变量 JAVA_VERSION
ENV JAVA_VERSION=jdk-25.0.3+9
# 2026-05-01 07:28:48 19.04MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; apk add --no-cache fontconfig ttf-dejavu ca-certificates p11-kit-trust musl-locales musl-locales-lang tzdata coreutils openssl ; rm -rf /var/cache/apk/* # buildkit
# 2026-05-01 07:28:48 0.00B 设置环境变量 LANG LANGUAGE LC_ALL
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
# 2026-05-01 07:28:48 0.00B 设置环境变量 PATH
ENV PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-05-01 07:28:48 0.00B 设置环境变量 JAVA_HOME
ENV JAVA_HOME=/opt/java/openjdk
# 2026-04-16 04:01:40 0.00B 设置默认要执行的命令
CMD ["/bin/sh"]
# 2026-04-16 04:01:40 8.45MB 复制文件或目录到容器中
ADD alpine-minirootfs-3.23.4-x86_64.tar.gz / # buildkit
镜像信息
{
"Id": "sha256:0fc3f6767c5d79f989038305f11a68300eccd1153267d0d481da6103574bf046",
"RepoTags": [
"ghcr.io/grimmory-tools/grimmory:v3.0.3",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/grimmory-tools/grimmory:v3.0.3"
],
"RepoDigests": [
"ghcr.io/grimmory-tools/grimmory@sha256:a903a2b44c308bd1738b6f7cdb5a2e5a2a1ae23a092f30eb68581e2be1af50cd",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/grimmory-tools/grimmory@sha256:09eb0455fa3e0f08bf77ed043f3e90da5ae7f463ed211bef54c6eac658394b47"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-05-02T05:12:16.728468044Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"6060/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"JAVA_HOME=/opt/java/openjdk",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"JAVA_VERSION=jdk-25.0.3+9",
"JAVA_TOOL_OPTIONS=-XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact -XX:+UseCompactObjectHeaders -XX:MaxRAMPercentage=60.0 -XX:InitialRAMPercentage=8.0 -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:MaxMetaspaceSize=256m -XX:ReservedCodeCacheSize=48m -Xss512k -XX:CICompilerCount=2 -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication -XX:ShenandoahUncommitDelay=5000 -XX:ShenandoahGuaranteedGCInterval=30000 -XX:MaxDirectMemorySize=256m",
"APP_VERSION=v3.0.3",
"APP_REVISION=08450fa26ad2adab41047032f5defcb13adbae45"
],
"Cmd": [
"java",
"--enable-native-access=ALL-UNNAMED",
"--enable-preview",
"-jar",
"/app/app.jar"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/",
"Entrypoint": [
"/usr/local/bin/entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"org.opencontainers.image.base.name": "docker.io/library/eclipse-temurin:25-jre-alpine",
"org.opencontainers.image.description": "Grimmory: a self-hosted, multi-user digital library with smart shelves, auto metadata, Kobo and KOReader sync, BookDrop imports, OPDS support, and a built-in reader for EPUB, PDF, and comics.",
"org.opencontainers.image.documentation": "https://grimmory.org/docs/getting-started",
"org.opencontainers.image.licenses": "AGPL-3.0",
"org.opencontainers.image.revision": "08450fa26ad2adab41047032f5defcb13adbae45",
"org.opencontainers.image.source": "https://github.com/grimmory-tools/grimmory",
"org.opencontainers.image.title": "Grimmory",
"org.opencontainers.image.url": "https://github.com/grimmory-tools/grimmory",
"org.opencontainers.image.version": "v3.0.3"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 490508004,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/b26e13ddb6a76bd2703db6378821ba545ebe414d39fb5b62c994f9e45dcb8b80/diff:/var/lib/docker/overlay2/d1b524fa594b252d696acc9b2c0dfaa5ed917ee634aadb1b51f0bef25548f7c3/diff:/var/lib/docker/overlay2/ce6d9f6ed152d29b48cf0323e864be9dcff4cbeb90c9891bb11262b732f77c12/diff:/var/lib/docker/overlay2/c68a2642ed2bbd08f97b4551ae24873088c5937b2d6c637233b2112560ba9b4b/diff:/var/lib/docker/overlay2/4088b6e9db2c8bdf0a46382764cf23e6d614f17442e4801742be192ffe6e371d/diff:/var/lib/docker/overlay2/4194c651a131942709202213b8416a2dc43b1c505e01c9475f235a8e8224120a/diff:/var/lib/docker/overlay2/f3e376a12a6f1544b824d4870cc30cecf8c6f78587d9ab4e342c069eeb71ddd6/diff:/var/lib/docker/overlay2/65d521582f28bad66d850c0d65d92b4fefacf38b955498096e1cac91a31288fd/diff:/var/lib/docker/overlay2/50e7768a8895d86c6db71760e3ab175e80450d5837967c15ad1735859affe4b8/diff:/var/lib/docker/overlay2/dd4136f8fb809e8d7b8a9b1c396892a0c4e765783d01914aab67ed4f28c1e5b9/diff:/var/lib/docker/overlay2/9a1ef5a883ef2cbf9a0d960bba5d783f7ecd7d9d3ba8bb8cd5537b33d65a942f/diff",
"MergedDir": "/var/lib/docker/overlay2/004eb02edbdc6c4b216f49597f5ec1c44ee13e37ddd6416eb2ce6d42efdbfd9a/merged",
"UpperDir": "/var/lib/docker/overlay2/004eb02edbdc6c4b216f49597f5ec1c44ee13e37ddd6416eb2ce6d42efdbfd9a/diff",
"WorkDir": "/var/lib/docker/overlay2/004eb02edbdc6c4b216f49597f5ec1c44ee13e37ddd6416eb2ce6d42efdbfd9a/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1",
"sha256:031f48ba581179239288580d4f8eabcd541f2d17452b7a6fcc391c510ffbba31",
"sha256:ede091da386508980bb6b5e0da08eb9bec12c09e800ab8e47bc2ef4d0c647f32",
"sha256:56d86223dde2e8560e6c2d240e8bec140cf40265770eb0f5e3b8a3ae92077c35",
"sha256:d9c041418ab554092d6c2566560e26bef10033aa758633b9e69ffaa8a39a6353",
"sha256:a41abf7d602403b11ed3398e72315168b4b1d4cfe0d0b06a2f2402ebdeb4300a",
"sha256:4875fb29bb59922474d53483930a6e27687cb54eb45043c011d53e94d333190a",
"sha256:6f138eec9215201f15d79eff1c846bcd7e83133174235954699d2252dbddf3f2",
"sha256:502dd4a6ea76f1959168dd51c2c96cb7aa2fc07b663d45decfbd681c42fd0196",
"sha256:3d9b5b0477f5a1dc6424402643379c525c958d021ae2af747aee3783f080b76f",
"sha256:ef06e2cbf429f8040413d5ea1ddea0c6d821e49c2eade1fb16689a8a6e59c033",
"sha256:f247485a3fc74d4c998eb9ce85b777395653114e1af61f9e94457a499b98cdff"
]
},
"Metadata": {
"LastTagTime": "2026-05-11T21:59:53.842733629+08:00"
}
}