Я работаю с Docker Compose над запуском консольного приложения .NET C#. Мне нужно передать аргументы командной строки приложению при его запуске, но в журналах появляется следующая ошибка:
2025-01-15 13:07:47 System.ArgumentException: Required input args was empty. (Parameter 'args')
2025-01-15 13:07:47 at Ardalis.GuardClauses.GuardClauseExtensions.NullOrEmpty[T](IGuardClause guardClause, IEnumerable`1 input, String parameterName, String message, Func`1 exceptionCreator)
2025-01-15 13:07:47 at Personnel.Infrastructure.Migrator.Program.Main(String[] args) in C:\Users\user\RiderProjects\staffpro.learn.redkozubov\src\Services\Personnel\Infrastructure\Personnel.Infrastructure.Migrator\Program.cs:line 21
Вот мой Docker Compose для контейнераpersonal_migrator:
personnel_migrator:
container_name: personnel_migrator
build:
context: .
dockerfile: src/Services/Personnel/Infrastructure/Personnel.Infrastructure.Migrator/Dockerfile
depends_on:
- personnel_db
networks:
- personnel_db
ports:
- "5001:5001"
environment:
- CONNECTION_STRING=${CONNECTION_STRING}
command: dotnet Personnel.Infrastructure.Migrator.dll --${CONNECTION_STRING}
Мой файл .env содержит:
CONNECTION_STRING="ConnectionString"
Приложение ожидает передачи аргументов, но при запуске приложения массив args оказывается пустым. Как правильно передать аргументы командной строки приложению .NET в Docker Compose?
Вот мой код Program.cs
private static readonly Migrator Migrator = new();
internal static void Main(string[] args)
{
try
{
Guard.Against.NullOrEmpty(args);
Migrator.Migrate(args);
}
catch (Exception exception)
{
Console.WriteLine(exception);
throw;
}
}
Вот файл докеров:
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
USER $APP_UID
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["src/Services/Personnel/Infrastructure/Personnel.Infrastructure.Migrator/Personnel.Infrastructure.Migrator.csproj", "src/Services/Personnel/Infrastructure/Personnel.Infrastructure.Migrator/"]
COPY ["src/Services/Personnel/Infrastructure/Personnel.Infrastructure.Data/Personnel.Infrastructure.Data.csproj", "src/Services/Personnel/Infrastructure/Personnel.Infrastructure.Data/"]
COPY ["src/Services/Personnel/Domain/Personnel.Domain/Personnel.Domain.csproj", "src/Services/Personnel/Domain/Personnel.Domain/"]
RUN dotnet restore "src/Services/Personnel/Infrastructure/Personnel.Infrastructure.Migrator/Personnel.Infrastructure.Migrator.csproj"
COPY . .
WORKDIR "/src/src/Services/Personnel/Infrastructure/Personnel.Infrastructure.Migrator"
RUN dotnet build "Personnel.Infrastructure.Migrator.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "Personnel.Infrastructure.Migrator.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-in-dock
Как передать аргументы консольному приложению .NET C# при запуске в Docker Compose? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как передать аргументы консольному приложению .NET C# при запуске в Docker Compose?
Anonymous » » в форуме C# - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как предоставить входные данные консольному приложению с помощью cin в Qt Creator
Anonymous » » в форуме C++ - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-