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

Docker exec在CMD脚本与命令行执行结果不一致问题咨询

问题与解决方法

现象

  • 在CMD脚本中执行以下命令:
    docker exec my-container bash -c "stat -c '%U' /my/directory"
    
    输出结果为:
    U
    
  • 但直接在命令行执行相同命令时,输出是:
    root
    
  • 把%U替换为%A查看权限时,命令行执行:
    docker exec my-container bash -c "stat -c '%A' /my/directory"
    
    输出:
    drwxrwxrwx
    
  • 而CMD脚本执行该命令的结果是:
    A
    
  • 以下命令在脚本和命令行执行都能得到预期结果:
    docker exec my-container bash -c "ls -al /"
    docker exec my-container bash -c "su - -c 'ls -al /' myUser"
    

原因与解决方法

这是因为Windows CMD脚本中,%是环境变量的引用符号,当脚本里出现%U或%A时,CMD会尝试将其解析为环境变量。如果系统中没有名为U或A的环境变量,就会被替换为空字符串,最终传递给docker的命令就变成了stat -c 'U' /my/directory,所以输出只剩U或A。

解决方法很简单,在CMD脚本里把%转义为%%,这样CMD会把%%解析为单个%传递给docker:

docker exec my-container bash -c "stat -c '%%U' /my/directory"
docker exec my-container bash -c "stat -c '%%A' /my/directory"

修改后执行脚本,就能得到和命令行一致的root和drwxrwxrwx输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:15:12