Skip to main content
 首页 » 编程设计

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

2024年02月25日34softidea

我创建了一个支持 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"] 

控制台程序只是打印出参数。 (Console.WriteLine("参数是 {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 是空的。 找到。 -name MyApp.dll 找不到任何东西?

请您参考如下方法:

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

https://github.com/rquackenbush/DotNetCoreArgs

构建后:

docker build . 

我能够运行:

docker run <imageid> ABC 

我得到了:

Hello World! 
There are 1 args. 
  ABC