【问题标题】:How to pass command line arguments to a dotnet dll in a Docker image at run time?如何在运行时将命令行参数传递给 Docker 映像中的 dotnet dll?
【发布时间】:2019-02-13 15:38:26
【问题描述】:

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

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

谢谢

【问题讨论】:

标签: .net docker


【解决方案1】:

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

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

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

您需要知道的另一件事 - docker run ... <image_name> ... after 中写的内容 - 被视为 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

命令行 2:

docker run ... <your image name>

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

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 2012-09-01
    相关资源
    最近更新 更多