Files
cloudron-whisparr-3/Dockerfile
bradinfluence 10403723a5 Initial Whisparr Cloudron app implementation
- Created Dockerfile with multi-stage build using thespad/whisparr image
- Added CloudronManifest.json with proper configuration (port 6969)
- Created start.sh script to launch Whisparr
- Added README.md with installation instructions
- Copied all required musl-compatible libraries:
  - musl libc dynamic linker
  - C++ standard library (libstdc++)
  - GCC support library (libgcc_s)
  - ICU libraries for .NET globalization
  - OpenSSL libraries for HTTPS/TLS
  - SQLite library for database operations
  - Brotli compression libraries
  - zlib library
- Configured for amd64 architecture (Cloudron compatible)
2026-01-02 05:33:07 +00:00

84 lines
4.2 KiB
Docker

# 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" ]