docker - 构建并运行 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 的路径也很重要。
解决方案
您可以使用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 { });
请参阅此处了解更多信息。
推荐阅读
- javascript - 我如何(在 D3 中)使一个矩形改变它的大小,同时保持在一个点上?
- python - 结合同一数据集的张量矩阵和稀疏矩阵来分割数据
- javascript - 滑动工具元素,被点击
- javascript - 有没有办法改变按键上按钮的css?
- python - 如何使用 Python 中已定义函数的打印语句
- stripe-payments - 使用 Stripe Billing API 自动生成付款和计划
- c++ - 给定岛的外围标记其在矩阵中的内部(算法)
- javascript - 更新 Mongo DB 中的嵌套数组元素值
- linux - 在EC2上运行大数据集,担心存储
- java - 如果我使用 @Produces(MediaType.APPLICATION_XML) 在 Jersey Web 应用程序中面临 NullPointerException