【问题标题】:A fatal error was encountered. The library 'libhostpolicy.so' required遇到致命错误。需要库“libhostpolicy.so”
【发布时间】:2018-04-27 08:52:27
【问题描述】:

我正在运行 dotnet core 2.0 控制台项目。 尝试从 Docker 运行时遇到以下错误。

遇到致命错误。需要库“libhostpolicy.so” 在“/app”中找不到执行应用程序。

【问题讨论】:

    标签: docker .net-core


    【解决方案1】:

    对我来说,我必须添加到项目文件的 PropertyGroup 部分的以下行才能达到目的:

    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    

    【讨论】:

    • 升级到 netcore 3.1 后,我遇到了同样的错误,但使用 Xunit 测试项目。添加此属性解决了该问题。谢谢罗迪翁!
    【解决方案2】:

    经过一番谷歌搜索,我发现了这个:
    https://github.com/aspnet/aspnet-docker/issues/301

    我不确定是什么原因造成的,但它似乎已经消失了。它是 可能是因为我的 appSettings.json 大小写不匹配,而不是 appsettings.json 这意味着该文件没有被加载。 虽然是可怕的错误。

    在我的情况下,我忘记将 appsettings.json 复制到构建中。

    希望这对其他人有所帮助,并在谷歌搜索中获得更高的排名。

    【讨论】:

    • 只是共享:.Net 6.0 控制台似乎不存在
    【解决方案3】:

    经过更多谷歌搜索,我们找到了这个链接:

    http://szahariev.blogspot.co.nz/2016/10/libhostpolicyso-was-not-found-error.html

    这导致我们发现我们以某种方式设法从 .csproj 文件中手动删除了(在我们的例子中)&lt;OutputType&gt;Exe&lt;/OutputType&gt; 行。所以根本没有创建 runtimeconfig.json

    【讨论】:

      【解决方案4】:

      在我的情况下,我在Linux 机器上为WorkerService 收到此错误。通过正确安装.Net Core 及其SDKs 进行修复。

      【讨论】:

        【解决方案5】:

        GenerateRuntimeConfigurationFiles 之上,我还必须将&lt;TargetFramework&gt;netstandard2.1&lt;/TargetFramework&gt; 替换为&lt;TargetFramework&gt;netcoreapp3.1&lt;/TargetFramework&gt;

        所以很可能是.NET SDK版本安装相关。

        【讨论】:

          【解决方案6】:

          以上都对我没有帮助,但我的情况有所不同:我的项目是一个 aspnet core 3.1 webapi。我按照tutorial 的说明操作并看到此错误消息。过了一会儿,我想到将我的dockerfile 中的基本图像从microsoft/aspnetcore:2.0 更改为mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime,类似于MS Page 上关于ASP.NET Core 的docker 图像的hint,并且错误消失了。 所以我想说这个错误的根本原因可能是一个不兼容的基础镜像。

          【讨论】:

            【解决方案7】:

            所以上面的答案都没有对我有用,但我终于找到了问题,它是在 API 的 .csproj 文件中的东西,它导致托管 API 的 docker 容器不以消息开头主题标题。

            这是 PropertyGroup 节点中添加的行,大概是当有人发布了 windows 文件,然后签入了更新的 .csproj

            &lt;RuntimeIdentifier&gt;win-x64&lt;/RuntimeIdentifier&gt;

            事实证明,这是一个发布选项。删除它会将项目设置为可移植的默认值(在 UI 中),如果明确指定,则在文件中为“任意”。删除上面的行为我解决了这个问题。

            编辑

            附带说明一下,通过将 Dockerfile dotnet 发布参数更改为:

            RUN dotnet publish ./src/API.csproj --self-contained --runtime linux-musl-x64 --configuration Release --output /app/publish
            

            重要的部分是为 alpine-linux 添加了 --self-contained--runtime linux-musl-x64 ...此图片:mcr.microsoft.com/dotnet/aspnet:3.1-alpine

            构建镜像是mcr.microsoft.com/dotnet/sdk:3.1

            【讨论】:

              【解决方案8】:

              在我的情况下,问题是指定要运行的 .dll 不正确(库而不是 Web 应用程序)。

              首先我确认服务启动成功

              dotnet publish "MyProject.csproj" -c Release -o D:\publish --self-contained --runtime linux-x64
              

              并在日志中看到有关无效 .dll 的消息。

              然后我更正了 .dll 并尝试发布自包含和依赖于框架的内容——两者都成功启动。

              所以原因可能很棘手。

              【讨论】:

                【解决方案9】:

                与 Docker 无关,但在尝试调试通过命令行(Azure Func Core 工具)创建的 Azure Core Function 时出现错误。当我尝试创建新的调试器配置时,VS Code 中的 launch.json 没有正确自动生成。然后,我使用 Azure Function 扩展重新创建了一个新的 Function App 项目并复制了生成的 launch.json。这个文件对我有用。

                {
                  "version": "0.2.0",
                  "configurations": [
                    {
                      "name": "Attach to .NET Functions",
                      "type": "coreclr",
                      "request": "attach",
                      "processId": "${command:azureFunctions.pickProcess}"
                    }
                  ]
                }
                
                

                【讨论】:

                  猜你喜欢
                  • 2022-10-19
                  • 2021-03-06
                  • 2015-03-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多