From a7574c19b59f2a94381ca294a4872401b9012af2 Mon Sep 17 00:00:00 2001 From: Reuben Swartz Date: Fri, 13 Feb 2026 16:51:09 -0500 Subject: [PATCH] Fix running in docker --- UsfmScannerNet/Dockerfile | 20 ++++++++++++++++++-- UsfmScannerNet/Program.cs | 15 +++++++++++---- UsfmScannerNet/UsfmScannerNet.csproj | 2 +- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/UsfmScannerNet/Dockerfile b/UsfmScannerNet/Dockerfile index 194ed0c..7242433 100644 --- a/UsfmScannerNet/Dockerfile +++ b/UsfmScannerNet/Dockerfile @@ -1,5 +1,4 @@ -FROM mcr.microsoft.com/dotnet/runtime:10.0 AS base -USER $APP_UID +FROM mcr.microsoft.com/dotnet/runtime:10.0 AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build @@ -13,9 +12,26 @@ RUN dotnet build "./UsfmScannerNet.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release +# Publish the application RUN dotnet publish "./UsfmScannerNet.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false +# Install CSnakes.Stage tool to get the Python redistributable (which includes libcsnakes_python.so) +RUN dotnet tool install --global CSnakes.Stage +ENV PATH="/root/.dotnet/tools:${PATH}" +# Setup Python redistributable - this downloads Python + libcsnakes_python.so +RUN setup-python --python 3.12 --venv /app/python-env --pip-requirements /src/UsfmScannerNet/requirements.txt --verbose FROM base AS final WORKDIR /app +ENV InContainer=true +ENV PythonHome=/app +# Copy the application COPY --from=publish /app/publish . +# Copy Python virtual environment from build stage +COPY --from=publish /app/python-env /app/python-env +# Copy CSnakes redistributable to a location accessible to the app user +# CSnakes looks in ~/.config/CSnakes, so we copy to /home/app/.config/CSnakes +COPY --from=publish /root/.config/CSnakes /home/app/.config/CSnakes +# Set proper permissions +RUN chown -R $APP_UID:$APP_UID /app /home/app/.config +USER $APP_UID ENTRYPOINT ["dotnet", "UsfmScannerNet.dll"] diff --git a/UsfmScannerNet/Program.cs b/UsfmScannerNet/Program.cs index 65608bd..788c4c9 100644 --- a/UsfmScannerNet/Program.cs +++ b/UsfmScannerNet/Program.cs @@ -1,4 +1,4 @@ -using CSnakes.Runtime; +using CSnakes.Runtime; using Microsoft.Extensions.Azure; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -23,11 +23,18 @@ static void Main(string[] args) { config.DefaultRequestHeaders.Add("User-Agent", "UsfmScannerNet"); }); - builder.Services.WithPython() + var pythonHome = builder.Configuration.GetValue("PythonHome", "."); + var inContainer = builder.Configuration.GetValue("InContainer"); + + var pythonBuilder = builder.Services.WithPython() .WithHome(".") - .WithVirtualEnvironment("python-env") .FromRedistributable() - .WithPipInstaller(); + .WithVirtualEnvironment(Path.Join(pythonHome, "python-env")); + + if (!inContainer) + { + pythonBuilder.WithPipInstaller(); + } var app = builder.Build(); app.Run(); } diff --git a/UsfmScannerNet/UsfmScannerNet.csproj b/UsfmScannerNet/UsfmScannerNet.csproj index 75cd526..c1ce223 100644 --- a/UsfmScannerNet/UsfmScannerNet.csproj +++ b/UsfmScannerNet/UsfmScannerNet.csproj @@ -26,7 +26,7 @@ - +