代码之家  ›  专栏  ›  技术社区  ›  Dave New

将Docker卷装载到主机路径

  •  5
  • Dave New  · 技术社区  · 7 年前

    我需要从容器访问主机中的测试结果文件。我知道我需要创建一个在主机和容器之间映射的卷,如下所示,但是我没有得到任何写入主机的内容。

    docker run --rm -it -v <host_directory_path>:<container_path> imagename
    

    Dockerfile:

    FROM microsoft/dotnet:2.1-sdk AS builder
    WORKDIR /app
    COPY ./src/MyApplication.Program/MyApplication.Program.csproj ./src/MyApplication.Program/MyApplication.Program.csproj
    COPY nuget.config ./
    WORKDIR ./src/MyApplication.Program/
    RUN dotnet restore
    WORKDIR /app
    COPY ./src ./src
    WORKDIR ./src/MyApplication.Program/
    RUN dotnet build MyApplication.Program.csproj -c Release
    
    FROM builder as tester
    WORKDIR /app
    COPY ./test/MyApplication.UnitTests/MyApplication.UnitTests.csproj ./test/MyApplication.UnitTests/MyApplication.UnitTests.csproj
    WORKDIR ./test/MyApplication.UnitTests/
    RUN dotnet restore
    WORKDIR /app
    COPY ./test ./test
    WORKDIR ./test/MyApplication.UnitTests/
    RUN dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
    ENTRYPOINT ["dotnet", "reportgenerator", "-reports:coverage.cobertura.xml", "-targetdir:codecoveragereports", "-reportTypes:htmlInline"]
    

    入口点的命令工作正常。它正在将输出写入 MyApplication.UnitTests/codecoveragereports 目录,但不到主机目录。

    我的Docker运行如下:

    docker run --rm -it -v /codecoveragereports:/app/test/MyApplication.UnitTests/codecoveragereports routethink.tests:latest
    

    我可能做错什么了?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Siyu Zeeshan Akhter    7 年前

    看起来像是权限问题。

    -v /codecoveragereports:/app/***/codecoveragereports 正在根目录下装入目录 / 这很危险,你可能没有得到许可。

    最好在本地安装,比如 -v $PWD/codecoveragereports:/app/***/codecoveragereports 在哪里 $PWD 是等于当前工作目录的环境变量。