msys2和docker运行指定命令:在docker中运行之前在本地查找命令

Rob*_*man 10 docker msys2

在msys2中,任何时候我尝试执行一个docker run [image] [cmd]命令,这样我试图在docker容器中运行时会覆盖Dockerfile中指定的命令,它会在本地查找命令,如果它不存在则会失败.

例如,我的组织有一个docker镜像,其中python可执行文件位于,/usr/src/venv/bin/python而python不在$PATH.这不是我的本地python安装的地方,当我尝试运行时,docker run myimage /usr/src/venv/bin/python test.py我得到这个错误:OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"C:/msys64/usr/src/venv/bin/python\": stat C:/msys64/usr/src/venv/bin/python: no such file or directory"这个图像不是一个Windows图像,所以它不应该看着C:所以所以我必须得出结论它在本地寻找该命令而不是在容器内.

注意:我正在运行的$PATHdocker 是添加到msys2内部的Windows的Docker .

$ which docker
/c/Program Files/Docker/Docker/Resources/bin/docker.exe
Run Code Online (Sandbox Code Playgroud)

我使用过的一个解决方法是创建一个新的Dockerfile,它只有一行代表我想要的图像,另一个就是我想要的命令.然后我可以在docker run some-image不指定命令的情况下运行并且它可以工作

有没有什么方法可以在msys2中解决这个问题而不需要上面描述的烦人的解决方法?

Rob*_*ert 3

这是由于MinGW Posix 路径转换

我找到了两个解决方法。

使用双斜杠//开始路径,那么MSYS将不会转换路径:

docker run myimage //usr/src/venv/bin/python test.py
                   ^^this
Run Code Online (Sandbox Code Playgroud)

MSYS_NO_PATHCONV=1另一种方法是通过在 Windows Git MSys 或MSYS2_ARG_CONV_EXCL="*"MSYS2中设置来抑制路径转换。

资料来源:

如何阻止 mingw 和 msys 修改命令行中给出的路径名?

https://github.com/git-for-windows/git/issues/577#issuecomment-166118846