C# 从Docker容器中的.NET Core应用程序访问主机上的CSV文件

C# 从Docker容器中的.NET Core应用程序访问主机上的CSV文件,c#,docker,asp.net-core,.net-core,docker-compose,C#,Docker,Asp.net Core,.net Core,Docker Compose,从docker容器上运行访问主机上的CSV文件时遇到问题。根据中的Dockerfile,Web应用程序在发布模式下工作。这是我的Dockerfile和dockercompose.yml aspnetapp |- MyApp | |- MyApp.csproj |- Dockerfile |- data | |- user_input.csv (I want to access here from .NET App on docker) ... Dockerfile FROM mcr.mic

从docker容器上运行访问主机上的CSV文件时遇到问题。根据中的
Dockerfile
,Web应用程序在发布模式下工作。这是我的
Dockerfile
dockercompose.yml

aspnetapp
|- MyApp
|  |- MyApp.csproj
|- Dockerfile
|- data
|  |- user_input.csv (I want to access here from .NET App on docker)
...
Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80 
EXPOSE 443
RUN curl -sL https://deb.nodesource.com/setup_10.x |  bash -
RUN apt-get install -y nodejs

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
RUN curl -sL https://deb.nodesource.com/setup_10.x |  bash -
RUN apt-get install -y nodejs
COPY ["MyApp/MyApp.csproj", "MyApp/"]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
docker-compose.yml

version: "3"
services:
  aspnetapp:
    image: aspnetapp-img
    build: ./aspnetapp
    container_name: aspnetapp-ctr
    environment:
      ConnectionStrings__DefaultConnection: "server=mysql; uid=root; pwd=P@ssw0rd!; database=mydb;"
    ports:
      - "5000:80"
    depends_on:
      - mysql
  mysql:
    image: mysql-img
    ...
(MyApp也在docker上使用mysql,但我省略了这一部分,因为它与这个问题无关)

要从MyApp容器访问主机(
user_input.CSV
)上的CSV文件,我假设应该将
aspnetapp/data
装载到
aspnetapp img
上的某个位置。如果用户在运行容器时更改了CSV文件,应用程序应该访问新文件,因此我需要挂载它,而不是在Dockerfile中复制

这就是我的问题所在

  • 我应该在docker容器的何处安装
  • 如何从控制器访问文件
  • 我可以通过这种方式从控制器访问csv文件吗?

    多个选项:

  • 命令行
  • docker run-v:/data/input.csv
    
  • Docker compose
  • 卷:
    -:/data/input.csv
    
    更多信息:和

    如果要使用Azure:

    和其他插件:

    多个选项:

  • 命令行
  • docker run-v:/data/input.csv
    
  • Docker compose
  • 卷:
    -:/data/input.csv
    
    更多信息:和

    如果要使用Azure:


    和其他插件:

    如果是我,我会把csv放在azure Blob中,然后从那里得到它,那么你就不必担心文件系统了。谢谢你的评论!事实上,我是一名大学生,我正在实验室建立一个内部系统。所以我没有权力或资金使用外部服务。。。一个可能的解决方案是从客户端上传文件(React),但如果文件数量很大,我认为这不是一个好主意……耸耸肩,你可以获得一个免费帐户,一个blob不会花费你任何东西。从架构上来说,它有很多优点,并且它从等式中删除了文件系统。Azure为学生提供了很多免费的optoins。作为一名学生是一件好事:)如果是我,我会把csv放在azure Blob中,然后从那里得到它,那么你就不必担心文件系统。谢谢你的评论!事实上,我是一名大学生,我正在实验室建立一个内部系统。所以我没有权力或资金使用外部服务。。。一个可能的解决方案是从客户端上传文件(React),但如果文件数量很大,我认为这不是一个好主意……耸耸肩,你可以获得一个免费帐户,一个blob不会花费你任何东西。从架构上来说,它有很多优点,并且它从等式中删除了文件系统。Azure为学生提供了很多免费的optoins。做一名学生是件好事:)
    [ApiController]
    [Route("api/[controller]")]
    public class FileController : ControllerBase
    {
      public IActionResult AccessCsvFile()
      {
        var filePath = Path.Combine(_appEnvironment.ContentRootPath, "user_input.csv");
        ...
    
    docker run -v <relative/absolute path/data/user_input.csv>:/data/input.csv 
    
    
       volumes:
          - <relative/absolute path/data/user_input.csv>:/data/input.csv