You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用docker ps命令报错‘"docker ps" accepts no arguments’的解决方法

问题解决方案

错误根源是CMD环境不支持单引号作为参数包裹符:终端(如PowerShell、bash)能识别单引号,但CMD仅认可双引号",原命令中的'{{json .}}'在CMD环境下会导致参数解析混乱,让docker误以为后续内容是无效参数。

解决方法是将格式字符串的单引号替换为转义后的双引号,在C#中需正确转义双引号:

修改后的C#代码

var startInfo = new ProcessStartInfo("docker")
{
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    CreateNoWindow = true,
    // 方法1:用转义符\"表示双引号
    Arguments = "ps -a --format \"{{json .}}\"",
    // 方法2:用逐字字符串,双引号用两个""表示
    // Arguments = @"ps -a --format ""{{json .}}""",
    WorkingDirectory = workingDirectory
};
var process = Process.Start(startInfo);

原理说明

  • CMD中必须用双引号包裹需要明确边界的参数,--format的取值{{json .}}需用双引号标记范围
  • 在C#普通字符串中,"会被视为字符串结束符,需用\"转义;若使用逐字字符串(前缀@),则用连续两个""表示一个双引号

修改后对应的CMD命令会被解析为docker ps -a --format "{{json .}}",和终端中可正常运行的逻辑一致,避免参数解析错误。

内容的提问来源于stack exchange,提问作者Echo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:32:09