Docker run调用中目录路径被转Windows格式的问题排查与修复
Windows11 Git Bash中Docker脚本路径转换问题的修复
问题现象
在Windows11的Git Bash中执行docker-run.sh脚本时,Java应用报错提示源目录不存在,但直接执行docker run命令却能正常运行。从日志可见,脚本执行时容器内的--source-dir和--dest-dir被错误转换为Windows格式路径(如C:/Users/jgagnon/AppData/Local/Temp/inputs),而非预期的容器内Linux路径/tmp/inputs。
原因分析
Git Bash基于MSYS2,默认会将Unix风格的路径自动转换为Windows本地路径。当Docker客户端在Git Bash环境下运行时,会把命令行中以/开头的容器内路径参数(比如/tmp/inputs)误判为本地Windows路径,从而触发转换,导致Java应用收到错误的路径参数。
修复方案
1. 禁用Git Bash路径转换
在执行docker run命令前设置MSYS_NO_PATHCONV=1环境变量,强制禁止路径转换:
修改脚本中的docker run命令行,替换为:
MSYS_NO_PATHCONV=1 docker run -it --rm -v "$source_dir":/tmp/inputs -v "$dest_dir":/tmp/outputs helm-template-scanner --source-dir=/tmp/inputs --dest-dir=/tmp/outputs $output_lists_flag $include_source_flag
2. 优化变量引用(可选)
为避免路径包含空格时出现解析错误,建议给脚本中的路径变量添加双引号包裹:
-v "$source_dir":/tmp/inputs -v "$dest_dir":/tmp/outputs
验证效果
修改脚本后重新执行,查看容器日志,确认--source-dir和--dest-dir显示为容器内的Linux路径(/tmp/inputs、/tmp/outputs),Java应用可正常扫描Helm目录。
内容的提问来源于stack exchange,提问作者Joseph Gagnon
相关产品推荐
相关产品推荐

