Доступ к файлам CSV на хосте из. NET Core App в Docker контейнере - PullRequest
1 голос
/ 18 июня 2020

У меня проблемы с доступом к CSV-файлам на хосте из ASP. NET Приложение Core Web API , работающее в контейнере docker. Веб-приложение работает в режиме выпуска в соответствии с Dockerfile официального документа . Вот мои Dockerfile и docker-compose.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 также использует mysql на docker, но я пропустил эту часть, потому что она не имеет отношения к этому вопросу)

Чтобы получить доступ к файлам CSV на хосте (user_input.csv) из контейнера MyApp, я предполагаю, что мне нужно смонтировать aspnetapp/data куда-нибудь на aspnetapp-img. Если файл CSV изменяется пользователем во время запуска контейнера, приложение должно получить доступ к новому файлу, поэтому мне нужно смонтировать его вместо COPY в Dockerfile.

Здесь возник мой вопрос.

  1. Где мне установить на контейнер docker?
  2. Как получить доступ к файлу из контроллера?
[ApiController]
[Route("api/[controller]")]
public class FileController : ControllerBase
{
  public IActionResult AccessCsvFile()
  {
    var filePath = Path.Combine(_appEnvironment.ContentRootPath, "user_input.csv");
    ...

Могу ли я получить доступ к csv из контроллера таким образом?

1 Ответ

0 голосов
/ 18 июня 2020

Несколько вариантов:

  1. Командная строка
docker run -v <relative/absolute path/data/user_input.csv>:/data/input.csv 

Docker -compose
   volumes:
      - <relative/absolute path/data/user_input.csv>:/data/input.csv 

подробнее здесь: https://docs.docker.com/storage/volumes/ и https://docs.docker.com/compose/#preserve -volume-data-when-container-are- создано

Если вы хотите использовать Azure: https://github.com/Azure/azurefile-dockervolumedriver

И другие плагины: https://docs.docker.com/engine/extend/legacy_plugins/

...