Kit*_*Kit 8 c# process docker programmatically-created docker-for-windows
我正在尝试让集成测试正常工作。在测试初始化阶段,我尝试从 Docker 映像启动 Redis 服务器。
\n\nvar p = new Process { StartInfo = new ProcessStartInfo("docker", "run --name redistest \xe2\x80\x93p 6379:6379 redis")};\np.Start();\nRun Code Online (Sandbox Code Playgroud)\n\n当我这样做时,进程退出,退出代码为125。如果我注释掉这些行,请在测试代码执行之前在测试中命中断点,然后从命令行运行
\n\ndocker run --name redistest -p 6379:6379 redis\nRun Code Online (Sandbox Code Playgroud)\n\n从断点继续时,测试按预期运行。125存在代码仅意味着docker run失败,因此没有更多信息可继续。
在命令行调用或 C# 调用之前,我确保没有名为的redistest容器
docker stop redistest\ndocker rm redistest\nRun Code Online (Sandbox Code Playgroud)\n\n但行为上的差异仍然存在。所有这些以编程方式运行 docker 的尝试都失败了:
\n\n-d为什么以编程方式创建docker run命令进程会导致 docker 以 125 退出?
它以编程方式适用于某些图像,但不适用于其他图像。
\nzpa*_*win 10
我知道这是一个老问题,显然我来帮助原始发帖人已经太晚了,但由于在搜索 docker 或 podman 的此错误时,这个问题出现在搜索结果的顶部附近,我想我应该添加另一个问题我发现我没有看到提到的解决方法(应该适用于 podman 或 docker)。发布以防对其他人有帮助。
我必须赞扬上面的答案,尤其是 TheECanyon 的答案,它们为我指明了正确的方向,并提到它与通过有关--name。也就是说,这并不是什么革命性的事情。这只是 Kit 答案的一个变体,它将删除委托给 docker/podman,而不需要在代码/脚本中进行额外的处理。话又说回来,他的答案或混合方法可能更适合处理奇怪的情况。与其他人一样,我在使用该参数时遇到了此错误,但我没有看到任何有关无法运行容器的常见错误,因为具有该名称的容器已经存在。可能是因为我是从脚本运行它的。
到目前为止我没有看到提到的并允许我保留参数的--name是简单地手动删除现有容器(例如[docker|podman] rm <container-name>),然后将--rm参数添加到运行命令(例如[docker|podman] run --rm),这会导致容器在退出时被删除(在效果,然后您将在每次运行时重新创建容器,并且 docker/podman 会在停止/退出时将其删除)。如果您需要每次运行都使用完全相同的容器,则这可能行不通,但在我的情况下,所有配置/数据/持久位都存储在已安装的卷上,并在下次运行时重新获取,因此它工作得很好,包括在无根容器中。
这个解决方案对我来说比简单地删除名称更好,因为删除名称会导致每次运行都会生成一个新的容器实例,但不会清理旧的容器实例。如果您只需要在本地开发盒上运行 10 次,那么这没什么大不了的,但从理论上讲,随着时间的推移,这可能会导致一些存储问题,特别是如果您正在执行 100 或 1000 次运行,每次运行都会创建一个新的容器实例。
尽管已经过去一个月了,我最近也遇到了这个问题。从运行命令中删除 --name 后,它完美地工作了。我无法弄清楚为什么它会这样,但我将其发布在这里供人们查看可能不需要指定名称的地方。
| 归档时间: |
|
| 查看次数: |
59308 次 |
| 最近记录: |