Windows下Git Bash配置Jekyll Docker别名遇路径错误求助
在Windows主机的Git Bash中,希望创建Jekyll别名,通过运行jekyll/jekyll:stable镜像替代本地安装所有依赖,同时用Docker卷存储gems。配置的别名如下:
alias jekyll='winpty docker run --rm --volume=$PWD:/srv/jekyll --mount type=volume,src=gems,dst=/usr/gem,volume-driver=local -it jekyll/jekyll:stable'
执行jekyll命令后出现错误:
docker: Error response from daemon: invalid mount config for type "volume": invalid mount path: 'C:/Program Files/Git/usr/gem' mount path must be absolute. See 'docker run --help'.
明明尝试挂载的是Docker卷而非绑定挂载,使用-v语法也得到相同结果,怀疑Docker误将gems当作目录绑定挂载。用set -x调试后,实际执行的命令看起来正常:
winpty docker run --rm --volume=/h/:/srv/jekyll --mount type=volume,src=gems,dst=/usr/gem,volume-driver=local -it jekyll/jekyll:stable
后续发现问题核心:容器内的/usr目标路径被Git Bash错误转换为C:/Program Files/Git/usr/gem,需要让命令中的/usr/作为字面量传递。
Git Bash会自动将以单个/开头的路径转换为Git安装目录下的对应路径(比如/usr转成C:/Program Files/Git/usr),要避免这种转换,有两种可行的修改方式:
- 给容器内路径添加双斜杠转义
alias jekyll='winpty docker run --rm --volume=$PWD:/srv/jekyll --mount type=volume,src=gems,dst=//usr/gem,volume-driver=local -it jekyll/jekyll:stable'
将/usr/gem改为//usr/gem,双斜杠会让Git Bash识别这是容器内的绝对路径,不再进行本地路径转换。
- 用转义单引号包裹
--mount参数
alias jekyll='winpty docker run --rm --volume=$PWD:/srv/jekyll '\''--mount type=volume,src=gems,dst=/usr/gem,volume-driver=local'\'' -it jekyll/jekyll:stable'
单引号会阻止Git Bash对内部路径进行转换,别名定义中需要用转义单引号来包裹整个--mount参数。
内容的提问来源于stack exchange,提问作者ThomasMX

