如何将命令行参数传递给 docker run 并打印它?

ca9*_*3d9 2 c# docker .net-core

我创建了一个具有 docker (linux) 支持的 .Net core 2.1 控制台应用程序。这里是系统生成的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"]
Run Code Online (Sandbox Code Playgroud)

控制台程序只是打印出参数。( 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:来自守护程序的错误响应:OCI 运行时创建失败:container_linux.go:348:启动容器进程导致“exec: \”ABC\”:可执行文件不存在在 $PATH 中找到:未知。

我尝试过docker run -it MyApp:dev dotnet /app/MyApp.dll ABC,但出现了以下错误

您的意思是运行 dotnet SDK 命令吗?请从以下位置安装 dotnet SDK: 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

用法:dotnet [选项]
用法:dotnet [应用程序路径]

选项:
  -h|--help 显示帮助。
  --info 显示 .NET Core 信息。
  --list-sdks 显示已安装的 SDK。
  --list-runtimes 显示已安装的运行时。

我尝试了一下docker run -it MyApp:dev bash,发现目录/app是空的。find . -name MyApp.dll找不到任何东西?

RQD*_*QDQ 5

看起来你正在做的事情应该有效。我刚刚在这里做了一个回购:

https://github.com/rquackenbush/DotNetCoreArgs

构建后:

docker build .
Run Code Online (Sandbox Code Playgroud)

我能够运行:

docker run <imageid> ABC
Run Code Online (Sandbox Code Playgroud)

我得到了:

Hello World!
There are 1 args.
  ABC
Run Code Online (Sandbox Code Playgroud)