我有一个Web API(dotNetCore 3.1),我正在尝试对其进行Docker化。
当我想将文件写入基本主机时,事情开始变得复杂。 根据我的阅读,这可能与定义“音量” 有关。
让我们说我有这部分代码:
using (StreamWriter sr = new StreamWriter(@"C:\program\tmp.txt"))
{
while (max == -1 || counter < max)
{
try
{
sr.WriteLine($"Counter: {++counter}");
}
catch (Exception)
{
throw;
}
}
}
我设法建立一个容器并正确运行它,但是可能由于他不知道指定的路径而抛出异常。
这是我的Dockerfile:
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-nanoserver-1903 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build
WORKDIR /src
COPY ["dockerTest/dockerTest.csproj", "dockerTest/"]
RUN dotnet restore "dockerTest/dockerTest.csproj"
COPY . .
WORKDIR "/src/dockerTest"
RUN dotnet build "dockerTest.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "dockerTest.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "dockerTest.dll"]
如果您能帮助我将主机文件系统链接到容器,我会很高兴。
答案 0 :(得分:0)
使用CLI启动docker容器时,必须使用该选项来安装驱动器。 (您可能需要稍微玩一下主机路径)。
$ docker run -d --name devtest -v C:\data\input.data:/data nginx:latest
容器启动后,您不必使用主机路径
using (StreamWriter sr = new StreamWriter(@"/data/input.data"))
这在大多数情况下应该起作用。几乎没有曲折。
您还应该考虑使用docker compose文件,这些文件可以为您节省大量的键入和传递太多的命令行参数。
更多信息在这里:
Docker CLI:https://docs.docker.com/storage/volumes/
Docker撰写:https://docs.docker.com/compose/compose-file/#volume-configuration-reference