首页 > 解决方案 > 构建并运行 docker 容器作为 asp.net 核心中集成测试的一部分

问题描述

我对运行 HostedService 的 asp.net core 3.1 应用程序进行了集成测试。作为集成测试过程的一部分,我想在测试开始之前构建一个 docker 容器。我尝试在测试项目配置中添加以下命令:

<Target Name="Test" AfterTargets="Build">
        <Exec command="docker run --rm -p 3030:3030 -v $PWD/mocks:/app/mocks dotronglong/faker:stable" />
</Target>

它返回“以代码 127 退出”,所以我将其更改为:

<Target Name="Test" AfterTargets="Build">
        <Exec command="C:\Program Files\Docker\Docker\resources\bin\docker run --rm -p 3030:3030 -v $PWD/mocks:/app/mocks dotronglong/faker:stable" />
</Target>

我得到“退出代码9009”。

这个 docker 容器依赖于“模拟”,所以我将项目设置为:

<ItemGroup>
      <None Update="mocks\api.json">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </None>
</ItemGroup>

总的来说,这是运行 docker 容器进行集成测试的正确方法吗?考虑到此测试将在 CI/CD 中运行,因此用于运行 docker 的路径也很重要。

标签: dockerasp.net-coreintegration-testingfaker

解决方案


您可以使用Docker.DotNet从 docker 映像创建和运行容器。对于创建容器:

var address = Environment.OSVersion.Platform == PlatformID.Unix
            ? new Uri("unix:///var/run/docker.sock")
            : new Uri("npipe://./pipe/docker_engine");

var config = new DockerClientConfiguration(address);
var dockerClient = config.CreateClient();

await dockerClient.Containers.CreateContainerAsync(
            new CreateContainerParameters
            {
                Image = "image_name",
                Name = "container_name"
            });

然后你可以启动容器:

await dockerClient.Containers.StartContainerAsync("container_name", new ContainerStartParameters { });

请参阅此处了解更多信息。


推荐阅读