diff --git a/Web/Resgrid.Web/Dockerfile b/Web/Resgrid.Web/Dockerfile
index 4ea6977e..c337e0a0 100644
--- a/Web/Resgrid.Web/Dockerfile
+++ b/Web/Resgrid.Web/Dockerfile
@@ -47,6 +47,10 @@ FROM build AS publish
ARG BUILD_VERSION
RUN dotnet tool install -g Microsoft.Web.LibraryManager.Cli
ENV PATH="${PATH}:/root/.dotnet/tools"
+# Pre-restore client libraries with retries to survive transient CDN failures.
+# The csproj PrepublishScript is skipped when SKIP_LIBMAN_RESTORE=1 is set.
+RUN for i in 1 2 3; do libman restore && break || { echo "libman restore attempt $i failed, retrying..."; sleep 10; }; done
+ENV SKIP_LIBMAN_RESTORE=1
RUN dotnet publish "Resgrid.Web.csproj" -c Release -o /app/publish -p:Version=${BUILD_VERSION}
FROM base AS final
diff --git a/Web/Resgrid.Web/Resgrid.Web.csproj b/Web/Resgrid.Web/Resgrid.Web.csproj
index 42ced3cc..c049ee0e 100644
--- a/Web/Resgrid.Web/Resgrid.Web.csproj
+++ b/Web/Resgrid.Web/Resgrid.Web.csproj
@@ -97,7 +97,7 @@
-
+
diff --git a/Web/Resgrid.Web/libman.json b/Web/Resgrid.Web/libman.json
index 946f32e6..7bddc663 100644
--- a/Web/Resgrid.Web/libman.json
+++ b/Web/Resgrid.Web/libman.json
@@ -169,7 +169,7 @@
"destination": "wwwroot/lib/plyr/"
},
{
- "library": "@microsoft/signalr@latest",
+ "library": "@microsoft/signalr@8.0.7",
"destination": "wwwroot/lib/signalr/"
},
{