如何在运行时将命令行参数传递给Docker镜像中的.NET DLL?

4

我正在制作我的第一个Docker镜像。它是一个使用CMD启动的dotnet程序(Docker中只允许一个CMD)。我希望在运行时向程序传递一个参数(API密钥)。经过一些搜索,没有找到明确的答案。Entrypoint似乎不太有用。也许可以使用ENV,但它似乎只适用于Docker。我的Dockerfile:

FROM microsoft/dotnet
WORKDIR /app
COPY . /app
CMD [ "dotnet",  "/app/netcore/Somename.dll"]

谢谢


认为这是一个重复的问题,链接为https://stackoverflow.com/questions/48227820 - 你能确认一下吗? - Jon Skeet
是的,基本上这样。 - Gerry
1个回答

9

如果两者都使用JSON符号(如您的示例中),则Docker将ENTRYPOINTCMD合并为单个命令行。

这是JSON符号:CMD [ "dotnet", "/app/netcore/Somename.dll"]

这是shell符号:CMD dotnet /app/netcore/Somename.dll

你需要知道的另一件事是,docker run ... <image_name> ...后面跟着的内容被视为CMD

因此,总结一下:

  1. 命令行的常量(不可变)部分,例如dotnet foo.dll,可以放在ENTRYPOINT中。

  2. 变量部分,例如附加参数,您可以通过docker run提供,并在Dockerfile中将默认值放入CMD中。

例如:

Dockerfile

...
ENTRYPOINT ["dotnet", "/app/netcore/Somename.dll"]
CMD ["--help"]

命令行 1:

docker run ... <your image name> --environment=Staging --port=8080 

执行该命令将会运行 dotnet /app/netcore/Somename.dll --environment=Staging --port=8080

第二个命令行:

docker run ... <your image name>

将会产生dotnet /app/netcore/Somename.dll --help--help来自Dockerfile中定义的默认值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接