如何在运行时将命令行参数传递给 Docker 映像中的 dotnet dll?

Ger*_*rry 4 .net docker

处理我的第一个 Docker 镜像。它是一个使用 CMD 启动的 dotnet 程序(Docker 中只允许一个 CMD)。我想在运行时向程序传递一个参数(一个 API 密钥)。经过一番谷歌搜索,没有找到明确的答案。入口点似乎没有帮助。也许是 ENV,但似乎 ENV 仅适用于 Docker。我的 Dockerfile:

FROM microsoft/dotnet
WORKDIR /app
COPY . /app
CMD [ "dotnet",  "/app/netcore/Somename.dll"]
Run Code Online (Sandbox Code Playgroud)

谢谢

gra*_*pes 7

Docker 加入ENTRYPOINTCMD进入单个命令行,如果两者都使用JSON表示法,就像在您的示例中一样。

这是 JSON 表示法: CMD [ "dotnet", "/app/netcore/Somename.dll"]

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

你需要知道的另一件事 -docker run ... <image_name> ... 后面写的是什么 - 被认为是CMD.

所以,总结一下。

  1. 命令行的常量(不可变)部分,就像dotnet foo.dll您可以放入ENTRYPOINT.

  2. 变量部分,如附加参数,您提供docker run并可选择将默认值CMD放入Dockerfile

例子:

文件

...
ENTRYPOINT ["dotnet", "/app/netcore/Somename.dll"]
CMD ["--help"]
Run Code Online (Sandbox Code Playgroud)

命令行 1:

docker run ... <your image name> --environment=Staging --port=8080 
Run Code Online (Sandbox Code Playgroud)

会导致 dotnet /app/netcore/Somename.dll --environment=Staging --port=8080

命令行 2:

docker run ... <your image name>
Run Code Online (Sandbox Code Playgroud)

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