# syntax=docker/dockerfile:1.7 FROM mcr.microsoft.com/dotnet/sdk:10.0.203-noble AS build WORKDIR /src COPY global.json Directory.Build.props Directory.Build.targets ./ COPY proto/voicecat.proto proto/voicecat.proto COPY src/ src/ RUN dotnet restore src/VoiceCat.Server/VoiceCat.Server.csproj -r linux-x64 --locked-mode -p:NuGetLockFilePath=packages.publish.linux-x64.lock.json RUN dotnet publish src/VoiceCat.Server/VoiceCat.Server.csproj -c Release -r linux-x64 --self-contained true --no-restore \ -p:PublishSingleFile=true -p:PublishTrimmed=false -p:IncludeNativeLibrariesForSelfExtract=true -o /out \ && mkdir /empty-data FROM scratch AS export COPY --from=build /out/VoiceCat.Server /VoiceCat.Server FROM mcr.microsoft.com/dotnet/runtime-deps:10.0.10-noble-chiseled-extra AS runtime WORKDIR /app COPY --from=build --chown=1654:1654 /out/ ./ COPY --from=build --chown=1654:1654 /empty-data/ /data/ USER 1654:1654 VOLUME ["/data"] EXPOSE 8384/tcp EXPOSE 8384/udp ENV VOICECAT_DATA_DIR=/data \ VOICECAT_BIND_ADDRESS=0.0.0.0 \ VOICECAT_BIND_PORT=8384 HEALTHCHECK --interval=30s --timeout=6s --start-period=10s --retries=3 CMD ["/app/VoiceCat.Server", "--health-check", "127.0.0.1:8384"] ENTRYPOINT ["/app/VoiceCat.Server"]