Windows下Make中${PWD}无法挂载Docker卷该如何解决?
解决Windows下Makefile挂载Docker卷的路径问题
核心原因
Windows环境下,Make的${PWD}/$(PWD)变量无法正确获取当前工作目录(部分场景下为空),且cmd/PowerShell的环境变量与Make的变量空间不互通,导致路径传递失败。
解决方案
使用Make**内置的跨平台变量$(CURDIR)**替代${PWD},它由Make自身维护,能在Windows/Linux下都正确返回当前工作目录的绝对路径,Docker for Windows会自动完成路径格式转换(将C:\xxx转为/c/xxx)。
修改后的Makefile指令:
start_docker: @docker run --rm -p 8888:8888 -it -v "$(CURDIR):/home/docker/app" my_image
注意:Makefile的命令行必须用Tab键缩进,不能用空格,否则会报错。
备选方案(针对MinGW/Git Bash环境)
如果使用的是MinGW或Git Bash自带的Make,也可以通过shell函数调用系统命令获取路径:
start_docker: @docker run --rm -p 8888:8888 -it -v "$(shell pwd -W):/home/docker/app" my_image
pwd -W会返回Windows风格的路径(如C:\project),同样能被Docker识别。
为什么原来的写法不行?
- Windows的Make环境中,
PWD环境变量并非默认存在,或仅返回类Unix格式的空/无效路径; - 直接在终端执行命令时,
${PWD}是由PowerShell/cmd解析的,而Make执行时是在自己的环境中解析变量,两者不共享; - 使用
$(PWD)时,cmd会优先将其解析为自身的变量,而非Make的变量,导致路径格式不符合Docker要求。
内容的提问来源于stack exchange,提问作者Adrien Pacifico
相关产品推荐
相关产品推荐

