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

