我正在尝试进行集成测试。在测试初始化阶段,我尝试从docker镜像启动Redis服务器。
var p = new Process { StartInfo = new ProcessStartInfo("docker", "run --name redistest –p 6379:6379 redis")};
p.Start();
当我这样做时,该过程以退出代码 125 退出。如果我注释掉了这些行,请在执行测试代码之前在测试中击中一个断点,然后从命令行
运行docker run --name redistest -p 6379:6379 redis
从断点继续时,测试将按预期运行。 125 存在代码仅表示docker run
失败,因此没有更多信息可以继续。
在命令行调用或C#调用之前,我确保没有名为redistest
的容器
docker stop redistest
docker rm redistest
但是行为上的差异仍然存在。所有这些以编程方式运行docker的尝试均失败:
-d
为什么docker run
命令的编程过程创建会导致docker以125退出?
对于某些图像,它以编程方式仅能正常工作,而对于其他图像,则不能。
答案 0 :(得分:0)
我无法找出无法运行该容器的原因,实际上它确实发生在其他一些容器上。我仍在寻找答案,但是如果有人需要,这里提供了一种解决方法。
博客文章Integration testing using a docker container描述了使用Docker.DotNet NuGet程序包需要编写的代码,该程序包是与Docker SDK进行交互的客户端。
现在,我可以将这段代码放入集成测试装置中:
[AssemblyInitialize]
public static async Task InitializeDockerContainers(TestContext testContext)
{
await DockerSupport.StartDockerContainer("my container", "redis", "4.0.5-alpine", 6379);
}
并将其与(我已经在使用的)stop
和rm
命令结合使用,以便在集成测试过程中干净地创建和删除容器。
答案 1 :(得分:0)
即使这是一个月大,我最近也遇到了这个问题。从运行命令中删除--name后,它可以正常工作。我不知道为什么会这样,但是我将其发布在这里,供人们查看在什么地方不必指定名称。
答案 2 :(得分:-1)
在.NET Framework中,UseShellExecute默认情况下处于启用状态。这将更改新进程的当前目录。