dotnet核心访问WORKDIR之外的容器中的特定路径



在我的容器中,我有一个文件,路径如下:

/mnt/secrets/ACCESS-KEY

ACCESS-KEY是一个文件,其中有一行字符串,这是点网核心应用程序运行所需的。

在应用程序的appsettings.json文件中,我有:

"Credentials": {
"ACCESS_KEY_Path": "/mnt/secrets/ACCESS-KEY",
}

在我的.CS文件中,我正试图通过以下操作读取文件:

var accessKey = System.IO.File.ReadAllText(Path.GetFullPath(Configuration.GetValue<string>("Credentials:ACCESS_KEY_Path")))

然而,在容器日志中,我可以看到它抛出了一个错误,它说:

System.IO.DirectoryNotFoundException:找不到>路径"/app/mnt/secrets/ACCESS-KEY">

由于某种原因,dot-net将">/app/";到我配置的路径的开始。我想原因是因为在Dockerfile中,WORKDIR被设置为/app,现在我想知道如何访问/app目录之外但在同一容器中的文件?

您检查了应该何时使用Path.GetFullPath吗?有文档。当您需要获取指定文件/文件夹的完整路径时,可以使用它
请注意,为什么添加/app:

重要信息
如果路径是相对路径,则此重载将返回一个完全限定的路径,该路径可以基于当前驱动器和当前目录。当前驱动器和当前目录可以在应用程序执行时随时更改。因此,无法预先确定由该过载返回的路径。要返回确定性路径,请调用GetFullPath(String,String(重载。您还可以调用IsPathFullyQualified方法来确定路径是完全限定的还是相对的,从而确定是否需要调用GetFullPath。

要解决您的问题,请不要使用它。

System.IO.File.ReadAllText(Configuration.GetValue<string>("Credentials:ACCESS_KEY_Path"))

由于/mnt/secrets/ACCESS-KEY/开头,它是从根开始的绝对路径,因此这应该足够:

var accessKey = System.IO.File.ReadAllText(Configuration.GetValue<string>("Credentials:ACCESS_KEY_Path"))

最新更新