Как передать аргумент командной строки для запуска докера и распечатать его?

Я создал консольное приложение .Net core 2.1 с поддержкой docker (linux). Вот система, созданная Dockerfile.

FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY MyApp/MyApp.fsproj MyApp/
RUN dotnet restore MyApp/MyApp.fsproj
COPY . .
WORKDIR /src/MyApp
RUN dotnet build MyApp.fsproj -c Release -o /app

FROM build AS publish
RUN dotnet publish MyApp.fsproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]

Консольная программа просто выводит аргумент. (Console.WriteLine("The args are {0}", args);)

Однако docker run MyApp:dev ничего не печатает. И docker run MyApp:dev ABC получил следующую ошибку.

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"ABC\": executable file not found in $PATH": unknown.

Я попробовал docker run -it MyApp:dev dotnet /app/MyApp.dll ABC и получил ошибку

Did you mean to run dotnet SDK commands? Please install dotnet SDK from: http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

Запуск docker run -it MyApp:dev dotnet показывает использование dotnet.

PS C:\Temp> docker run -it MyApp:dev dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET Core information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

Я попробовал docker run -it MyApp:dev bash и обнаружил, что каталог /app пуст. find . -name MyApp.dll ничего не может найти?

2
0
3 218
1

Ответы 1

Похоже, то, что вы делаете, должно сработать. Я только что сделал здесь репо:

https://github.com/rquackenbush/DotNetCoreArgs

После постройки:

docker build .

Я смог запустить:

docker run <imageid> ABC

И я получил:

Hello World!
There are 1 args.
  ABC

Я попробовал docker run -it dotnet /app/MyApp.dll ABC и получил ошибку "Unable to find image 'dotnet:latest' locally C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: pull access denied for dotnet, repository does not exist or may require 'docker login'.". Должен ли образ быть указан в командной строке?

ca9163d9 10.08.2018 17:10

Извинения - я оставил имя изображения для запуска

RQDQ 10.08.2018 17:14

Нет проблем, я попробовал с именем образа и получил ошибку Did you mean to run dotnet SDK commands? Please install dotnet SDK from: http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

ca9163d9 10.08.2018 17:16

Ах, чтобы убедиться, что dotnet не пытается использовать аргументы, которые вы передаете, для собственных нужд, вам нужно добавить --

RQDQ 10.08.2018 17:17

У меня такая же ошибка dotnet SDK после добавления --. Я пробовал это как в PowerShell, так и в cmd.

ca9163d9 10.08.2018 17:19

Попробуйте переместить - сразу после dotnet

RQDQ 10.08.2018 17:20
docker run -it crawlers:dev dotnet показывает использование dotnet. Похоже, путь к MyApp неверен.
ca9163d9 10.08.2018 17:39

Я вернулся и построил репро, и то, что вы делаете, похоже, работает в моей среде. Я использую Docker Community Edition версии 18.06.0-ce в Windows 10 и смог сделать это с cmd.

RQDQ 10.08.2018 17:57

Сначала я создал консольный проект, а затем добавил поддержку докеров. Не уверен, создаст ли он другой файл докера. Мой консольный проект написан на f #, это не имеет значения.

ca9163d9 10.08.2018 18:05

Позвольте нам продолжить обсуждение в чате.

RQDQ 10.08.2018 20:24

Другие вопросы по теме