Переменные среды из команды запуска Docker не передаются в консольное приложение .NET Core - PullRequest
0 голосов
/ 03 января 2019

У меня есть консольное приложение, написанное на .NET Core 2.1.1, которое я хочу запустить в сервисе Docker в Swarm.Консольное приложение требует пары входных значений, которые я хотел бы передать через переменные окружения.В настоящее время у меня есть следующий Dockerfile, который создает консольное приложение, и окончательный образ помещается в реестр.

FROM microsoft/dotnet:latest AS builder
WORKDIR /app
COPY MyApp.sln ./MyApp.sln
COPY src/MyApp.Console/*.csproj ./MyApp.Console/
COPY src/MyApp.Core/*.csproj ./MyApp.Core/
COPY src/MyApp.Infrastructure/*.csproj ./MyApp.Infrastructure/
WORKDIR /app/MyApp.Console
RUN dotnet restore MyApp.Console.csproj

WORKDIR /app/
COPY src/MyApp.Console/. ./MyApp.Console/
COPY src/MyApp.Core/. ./MyApp.Core/
COPY src/MyApp.Infrastructure/. ./MyApp.Infrastructure/
WORKDIR /app/MyApp.Console
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:runtime AS runtime
WORKDIR /app
COPY --from=builder /app/MyApp.Console/out ./
ENTRYPOINT ["dotnet", "MyApp.Console.dll"]

Я использую API Docker C # из веб-службы, которая будет загружать изображение и запускать его как службу внутри роя.

Но сейчас, для локального тестирования, я использую

docker run -i -t my.registry/my-app/my-app/my-app:latest -e "VAL1=test" -e "VAL2=test"

Но когда я вывожу значения переменных среды через

var var1 = Environment.GetEnvironmentVariable("VAL1");
System.Console.WriteLine($"Variable 1: {var1}");

Это пусто.Я также пытался использовать встроенный API-интерфейс ConfigurationBuilder, но он также не возвращает значения для этой переменной среды:

Configuration = new ConfigurationBuilder()
   .SetBasePath(Directory.GetCurrentDirectory())
   .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
   .AddEnvironmentVariables()
   .Build();

var var1 = Configuration["VAL1"];
System.Console.WriteLine($"Variable 1: {var1}");

Но он также ничего не возвращает для этой переменной.Когда я добавляю переменные окружения через Dockerfile, переменные извлекаются с помощью описанных выше подходов, но это не вариант, поскольку мне нужно, чтобы входные данные отправлялись во время выполнения, когда эти образы запускаются или добавляются в рой.

Еще одна вещь, на которую следует обратить внимание: когда я проверяю контейнер Docker, когда он работает, я вижу переменные среды в выходных данных JSON, но кажется, что консольное приложение не может их видеть.Я могу получить доступ к другим переменным среды из консольного приложения, но те, которые я добавляю в команду run, недоступны.

На данный момент я не знаю, что делать, так как множество примеровВ интернете говорят, что это должно работать.Я что-то пропустил?Можно ли извлекать переменные среды, указанные в команде запуска docker, из приложения?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Аргументы должны идти до image:

docker run -i -t -e "VAL1=test" -e "VAL2=test" my.registry/my-app/my-app/my-app:latest 
0 голосов
/ 03 января 2019

Команда Docker для передачи переменной среды должна выглядеть следующим образом:

docker run -i -t my.registry/my-app/my-app/my-app:latest -e VAL1='test' -e VAL2='test'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...