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
相关产品推荐
相关产品推荐

