【问题标题】:Dotnet core ENTRYPOINT parameter adds hyphen in DockerDotnet core ENTRYPOINT 参数在 Docker 中添加连字符
【发布时间】:2018-01-25 22:20:18
【问题描述】:

我正在尝试在 Docker 容器中配置运行简单的 .NET Core Web API 应用程序。我的 dockerfile 包含以下ENTRYPOINT 行:

ENTRYPOINT ["dotnet", "Project.name.dll"]

Dockerfile 正确构建镜像。但是,当我运行它时,出现以下异常:

找不到匹配命令“dotnet-Project.name.dll”的可执行文件

我不明白为什么要以这种方式转换参数(添加连字符)。我使用microsoft/dotnet:2.0.0-sdk-stretch 容器。官方documentation 推荐关注ENTRYPOINT 配置

ENTRYPOINT ["dotnet", "dotnetapp.dll"]

和我用的一样……

【问题讨论】:

    标签: docker .net-core


    【解决方案1】:

    这是一个奇怪的错误信息,但它确实是说找不到 dll。您可以在此处查看此“问题”的其他示例:https://github.com/dotnet/core-setup/issues/1126#issuecomment-327441394

    当您运行 dotnet foo.dll 时,dotnet 应用程序会尝试找到 foo.dll 并执行它。如果找不到 dll,dotnet 认为您可能正在尝试运行a dotnet command(沿着dotnet foo 的行,类似于dotnet build)。这使得dotnet 寻找一个名为dotnet-foo.dll 的可执行文件并尝试执行它。由于该文件也不存在,dotnet 最后报错dotnet-foo.dll 找不到。

    在您的情况下,dotnet 似乎找不到 Project.name.dll。 dll真的存在吗?它是否存在于当前目录中?也许您需要提供完整的路径?

    哦,如果你在 Azure 上运行它,有一些已知的陷阱,例如 putting your dlls under /home/ will just not work

    【讨论】:

    • 很好的答案。谢谢你。我已经执行了 ENTRYPOINT ["ls"],现在我看到我没有复制正确的文件。另一个问题是为什么 Docker 只看到“obj”目录,但这与连字符问题无关:)。谢谢 omajid。
    • 顺便提一下 - 由于 dockerignore,Docker 没有看到其他内容。这不是我的配置,所以我没有注意到:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多