docker-compose未安装测试结果的文件夹

时间:2018-04-17 09:02:59

标签: docker docker-compose docker-volume

在构建docker-compose文件的过程中运行unittests后,在容器中创建的文件未显示在我的本地文件系统上。

我有以下Dockerfile:

# IDM.Test/Dockerfile
FROM microsoft/aspnetcore-build:2.0
WORKDIR /src

# Variables
ENV RESTORE_POLICY --no-restore
ENV IGNORE_WARNINGS -nowarn:msb3202,nu1503

# Restore
COPY IDM.sln ./

# Copying and restoring other projects...

COPY IDM.Test/IDM.Test.csproj IDM.Test/
RUN dotnet restore IDM.Test/IDM.Test.csproj $IGNORE_WARNINGS

# Copy
COPY . .

# Test
RUN dotnet test IDM.Test/IDM.Test.csproj -l "trx;LogFileName=test-results.xml"
RUN ls -alR

运行RUN ls -alR时,我可以看到文件/src/IDM.Test/TestResults/test-results.xml是在容器中生成的。到目前为止一切都很好。

我正在使用docker-compose -f docker-compose.test.yml build开始构建。 docker-compose看起来像这样:

version: '3'

services:
  idm.webapi:
    image: idmwebapi
    build:
      context: .
      dockerfile: IDM.Test/Dockerfile
    volumes:
      - ./IDM.Test/TestResults:/IDM.Test/TestResults/

我已在本地创建了文件夹IDM.Test/TestResults,但在成功运行docker-compose build命令后没有显示任何内容。

任何线索?

1 个答案:

答案 0 :(得分:0)

也许有了这个解释,我们可以解决它。让我说一些明显的事情,以避免混乱,一步一步。容器创建有两个步骤:

  1. docker build / docker-compose build - >创建图像
  2. docker run / docker compose up / docker-compose run - >创建容器
  3. 卷在第二步(容器创建)中创建,而您的命令dotnet test IDM.Test/IDM.Test.csproj -l "trx;LogFileName=test-results.xml"正在第一个中执行(图像创建)。

      

    如果您在容器内的相同路径中创建了一个文件夹   装入的卷,此新文件夹中的数据仅在本地可用   在容器内。

    最后,我的建议可以通过以下几点恢复:

    • 检查在构建阶段是否未创建已安装卷的目标文件夹,因此,Dockerfile中未定义任何RUN mkdir /IDM.Test/TestResults/
    • 另一个小建议不是强制性的,但我喜欢在docker-compose文件中定义具有绝对路径的卷。
    • 不要在Dockerfile中执行生成您想要的数据的命令,除非您将此命令指定为ENTRYPOINT或CMD,而不是RUN。
    • 在Dockerfile中,ENTRYPOINT或CMD(或命令:在docker-compose中)指定在buildind之后执行的命令,当容器启动时。

    尝试使用此Dockerfile:

    # IDM.Test/Dockerfile
    FROM microsoft/aspnetcore-build:2.0
    WORKDIR /src
    
    # Variables
    ENV RESTORE_POLICY --no-restore
    ENV IGNORE_WARNINGS -nowarn:msb3202,nu1503
    
    # Restore
    COPY IDM.sln ./
    
    # Copying and restoring other projects...
    
    COPY IDM.Test/IDM.Test.csproj IDM.Test/
    RUN dotnet restore IDM.Test/IDM.Test.csproj $IGNORE_WARNINGS
    
    # Copy
    COPY . .
    
    # Test
    CMD dotnet test IDM.Test/IDM.Test.csproj -l "trx;LogFileName=test-results.xml"
    

    或者这个docker-compose: 版本:'3'

    services:
      idm.webapi:
        image: idmwebapi
        build:
          context: .
          dockerfile: IDM.Test/Dockerfile
        volumes:
          - ./IDM.Test/TestResults:/IDM.Test/TestResults/
        command: >
          dotnet test IDM.Test/IDM.Test.csproj -l "trx;LogFileName=test-results.xml"
    

    创建容器后,您可以使用ls生成的文件进行检查。