# Stage 1: Extract Whisparr binaries from available Docker image # Default to linux/amd64 for Cloudron compatibility, but allow override ARG TARGETPLATFORM=linux/amd64 ARG BUILDPLATFORM # Explicitly use linux/amd64 to ensure correct architecture FROM --platform=linux/amd64 thespad/whisparr:latest AS whisparr-source # Stage 2: Build the Cloudron image # Use explicit amd64 to match the source image FROM --platform=linux/amd64 cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4 RUN apt-get update -y && \ apt install -y curl sqlite3 dpkg file libstdc++6 libgcc-s1 libicu-dev RUN mkdir -p /app/code/whisparr WORKDIR /app/code # Copy Whisparr binaries from the source image # Most Whisparr Docker images have the binary in /app/whisparr COPY --from=whisparr-source /app/whisparr /app/code/whisparr # Copy musl libc dynamic linker from the source image # Whisparr binary uses musl libc which is not in the Cloudron base image (which uses glibc) RUN mkdir -p /lib /usr/lib COPY --from=whisparr-source /lib/ld-musl-x86_64.so.1 /lib/ld-musl-x86_64.so.1 # Create the symlink for libc.musl (it's a symlink to ld-musl in the source) RUN ln -sf /lib/ld-musl-x86_64.so.1 /lib/libc.musl-x86_64.so.1 # Copy musl-compatible C++ standard library and GCC support library from source image # These are musl-linked versions needed by the Whisparr binary COPY --from=whisparr-source /usr/lib/libstdc++.so.6.0.33 /usr/lib/libstdc++.so.6.0.33 COPY --from=whisparr-source /usr/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1 # Create symlinks if needed RUN if [ ! -f /usr/lib/libstdc++.so.6 ]; then \ ln -sf /usr/lib/libstdc++.so.6.0.33 /usr/lib/libstdc++.so.6; \ fi # Copy ICU libraries from source image (required by .NET applications) COPY --from=whisparr-source /usr/lib/libicudata.so.76.1 /usr/lib/libicudata.so.76.1 COPY --from=whisparr-source /usr/lib/libicui18n.so.76.1 /usr/lib/libicui18n.so.76.1 COPY --from=whisparr-source /usr/lib/libicuio.so.76.1 /usr/lib/libicuio.so.76.1 COPY --from=whisparr-source /usr/lib/libicuuc.so.76.1 /usr/lib/libicuuc.so.76.1 COPY --from=whisparr-source /usr/share/icu /usr/share/icu # Create symlinks for ICU libraries RUN ln -sf /usr/lib/libicudata.so.76.1 /usr/lib/libicudata.so.76 && \ ln -sf /usr/lib/libicui18n.so.76.1 /usr/lib/libicui18n.so.76 && \ ln -sf /usr/lib/libicuio.so.76.1 /usr/lib/libicuio.so.76 && \ ln -sf /usr/lib/libicuuc.so.76.1 /usr/lib/libicuuc.so.76 # Copy OpenSSL libraries from source image (required by .NET applications for HTTPS/TLS) COPY --from=whisparr-source /usr/lib/libssl.so.3 /usr/lib/libssl.so.3 COPY --from=whisparr-source /usr/lib/libcrypto.so.3 /usr/lib/libcrypto.so.3 # Copy SQLite library from source image (required for database operations) COPY --from=whisparr-source /usr/lib/libsqlite3.so.3.49.2 /usr/lib/libsqlite3.so.3.49.2 RUN ln -sf /usr/lib/libsqlite3.so.3.49.2 /usr/lib/libsqlite3.so.0 # Copy Brotli compression libraries from source image (required for HTTP compression) COPY --from=whisparr-source /usr/lib/libbrotlicommon.so.1.1.0 /usr/lib/libbrotlicommon.so.1.1.0 COPY --from=whisparr-source /usr/lib/libbrotlidec.so.1.1.0 /usr/lib/libbrotlidec.so.1.1.0 COPY --from=whisparr-source /usr/lib/libbrotlienc.so.1.1.0 /usr/lib/libbrotlienc.so.1.1.0 RUN ln -sf /usr/lib/libbrotlicommon.so.1.1.0 /usr/lib/libbrotlicommon.so.1 && \ ln -sf /usr/lib/libbrotlidec.so.1.1.0 /usr/lib/libbrotlidec.so.1 && \ ln -sf /usr/lib/libbrotlienc.so.1.1.0 /usr/lib/libbrotlienc.so.1 # Copy zlib library from source image (required by libSystem.IO.Compression.Native) COPY --from=whisparr-source /usr/lib/libz.so.1.3.1 /usr/lib/libz.so.1.3.1 RUN ln -sf /usr/lib/libz.so.1.3.1 /usr/lib/libz.so.1 # Verify the binary exists and set permissions RUN if [ -f /app/code/whisparr/bin/Whisparr ]; then \ file /app/code/whisparr/bin/Whisparr || echo "file command not available"; \ chmod +x /app/code/whisparr/bin/Whisparr; \ fi && \ chmod +x /lib/ld-musl-x86_64.so.1 && \ chmod +x /lib/libc.musl-x86_64.so.1 && \ chmod +x /app/code/whisparr/bin/libSystem.IO.Compression.Native.so 2>/dev/null || true COPY start.sh /app/code/ RUN chown -R cloudron:cloudron /app/code/whisparr && \ chmod +x /app/code/whisparr/bin/Whisparr 2>/dev/null || true CMD [ "/app/code/start.sh" ]