c# - 从 Docker 容器中的 .NET Core 应用程序访问主机上的 CSV 文件
问题描述
我无法从docker 容器上运行的ASP.NET Core Web API 应用程序访问主机上的 CSV 文件。根据官方文档Dockerfile
中的说明,Web 应用程序在 Release 模式下工作。这是我的和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"]
码头工人-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 文件,则应用程序应该访问新文件,因此我需要挂载它而不是挂载COPY
在 Dockerfile 中。
这就是我的问题出现的地方。
- 我在哪里安装 docker 容器?
- 如何从控制器访问文件?
[ApiController]
[Route("api/[controller]")]
public class FileController : ControllerBase
{
public IActionResult AccessCsvFile()
{
var filePath = Path.Combine(_appEnvironment.ContentRootPath, "user_input.csv");
...
我可以通过这种方式从控制器访问 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
更多信息:https ://docs.docker.com/storage/volumes/和https://docs.docker.com/compose/#preserve-volume-data-when-containers-are-created
如果你想使用 Azure:https ://github.com/Azure/azurefile-dockervolumedriver
和其他插件:https ://docs.docker.com/engine/extend/legacy_plugins/
推荐阅读
- c# - 这段代码在 Web 窗体项目中的什么位置?
- php - 如何使用 PHP 在 Wordpress 上设置全局 current_user?
- progressive-web-apps - 从页面到另一个页面的 PWA Web 蓝牙 API
- c++ - 如何访问模板类型参数包中的类型索引?
- postgresql - JOOQ 可以为 H2/Postgresql 别名 Liquibase JSONB 数据类型吗
- android - Cordova 插件 cordova-plugin-firebase-messaging 无效 ID
- objective-c - Mojave Xcode 应用程序的 AppleEvent 控制其他应用程序无法始终如一地工作 (NSAppleEventsUsageDescription)
- bash - 如何修改浮点数以显示至少 n 位
- javascript - Javascript检查对象值中是否存在数组值
- php - Laragon 管理员警告继续