docker build命令在Windows的MINGW bash中执行时将'C:/ Program Files / Git'添加到作为构建参数传递的路径中

Dra*_*lic 3 windows bash mingw docker

我有以下Dockerfile:

FROM ubuntu:16.04

ARG path1=def_path1
RUN mkdir ${path1}
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令构建此Dockerfile时:

docker build --build-arg path1=/home/dragan -t build_arg_ex .
Run Code Online (Sandbox Code Playgroud)

在Windows 10的MINGW bash中执行该错误时,出现以下错误:

$ ./build.sh --no-cache
Sending build context to Docker daemon  6.144kB
Step 1/3 : FROM ubuntu:16.04
 ---> 2a4cca5ac898
Step 2/3 : ARG path1=def_path1
 ---> Running in a35241ebdef3
Removing intermediate container a35241ebdef3
 ---> 01475e50af4c
Step 3/3 : RUN mkdir ${path1}
 ---> Running in 2759e683cbb1
mkdir: cannot create directory 'C:/Program': No such file or directory
mkdir: cannot create directory 'Files/Git/home/dragan': No such file or 
directory
The command '/bin/sh -c mkdir ${path1}' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)

在Windows命令提示符或Linux或Mac上构建相同的Dockerfile是可以的。该问题仅在Windows上的MINGW bash终端中存在,因为它在作为参数传递的路径之前添加了“ C:/ Program Files / Git”。

有没有一种方法可以在MINGW bash中执行此操作,因此它不添加'C:/ Program Files / Git'前缀?

谢谢

mat*_*007 7

这实际上是Windows Git的错误/局限性,如发行说明中已知问题中所述

如果您指定以斜杠开头的命令行选项,则将POSIX到Windows的路径转换将转换为“ /usr/bin/bash.exe”,例如,转换为“ C:\ Program Files \ Git \ usr \ bin \ bash”。可执行程序”。如果不希望这样做,例如“ --upload-pack = / opt / git / bin / git-upload-pack”或“ -L / regex /”,则需要像这样临时设置环境变量MSYS_NO_PATHCONV :

MSYS_NO_PATHCONV=1 git blame -L/pathconv/ msys2_path_conv.cc
Run Code Online (Sandbox Code Playgroud)

或者,您可以将第一个斜杠加倍,以避免POSIX到Windows的路径转换,例如“ //usr/bin/bash.exe”。

  • 谢谢你!转义初始斜杠意味着我可以从 gitbash 运行 docker exec :) (2认同)