C# 在Docker时获取文件

C# 在Docker时获取文件,c#,file,docker,asp.net-core,.net-core,C#,File,Docker,Asp.net Core,.net Core,我有一个简单的ASP.NET核心应用程序,它可以访问另一个项目中的文件。这是我的代码: var currentDirectory = Directory.GetCurrentDirectory(); string directory = Path.GetFullPath(Path.Combine(currentDirectory, @"..\Data\SqlScripts")); string[] fileArray = Directory.GetFiles(direct

我有一个简单的ASP.NET核心应用程序,它可以访问另一个项目中的文件。这是我的代码:

var currentDirectory = Directory.GetCurrentDirectory();
            string directory = Path.GetFullPath(Path.Combine(currentDirectory, @"..\Data\SqlScripts"));
string[] fileArray = Directory.GetFiles(directory, "*.sql");
eturn fileArray.SingleOrDefault(f => f.Contains(filename));
如果我在Docker for Linux中运行应用程序,我会得到一个异常,说找不到文件。调试时,
currentDirectory
被设置为
/app
,而不是实际的物理目录

在Docker中运行时如何获取文件

在Docker中运行时如何获取文件

docker提供的大部分价值是通过在容器中创建一个隔离的环境来实现的。这提供了使容器具有吸引力的所有好处(网络隔离、进程隔离等),但它确实意味着容器通常是完全隔离的(也有例外,如卷装载)。因此,尝试修改容器以便它可以访问容器外部的内容可能是一个好主意(例如数据库),也可能是一个相当糟糕的主意(本地文件访问)

你的文件包含什么?它们只是应用程序的静态数据吗?如果是这样,我建议将所有文件也放在容器中。如果您能够做到这一点,那么您的容器实际上就变成了一个独立的应用程序,不仅可以在您的计算机上运行,还可以在任何计算机上运行

如果文件在概念上与应用程序是分离的,那么它们需要以其他方式处理。例如,数据库需要是一个单独的容器。如果应用程序希望与文件服务器通信,那么您可能应该使用卷装载


考虑如何部署容器。它会是一个独立的东西吗?部署时它的依赖关系是什么?

调试时的GetCurrentDirectory与在Docker中时的区别是什么?在没有Docker的情况下运行GetCurrentDirectory=“C:\Users\…Data\SqlScripts”和在Docker=/appI Truse Directory.GetFiles时需要完全解析的路径。您可能需要在docker中实现卷。请看这里:一旦我创建了卷,我应该如何访问它?