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

msys2 and docker run specifying the command: looks for the command locally before running in docker

在 msys2 中,每当我尝试执行 docker run [image] [cmd] 命令时,我试图 docker 容器中的 运行 覆盖 Docker 中指定的命令]文件,它会在本地查找命令,如果不存在则失败。

例如,我的组织有一个 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" This image is not a windows image and所以它根本不应该查看 C: 所以我必须得出结论,它是在本地而不是在容器内查找该命令。

注意:docker 我 运行ning 是 Docker for windows 添加到我的 $PATH in msys2.

$ which docker
/c/Program Files/Docker/Docker/Resources/bin/docker.exe

我使用的一个解决方法是创建一个新的 Docker 文件,其中一行表示使用我想要的图像,另一行是我想要的命令。然后我可以 运行 docker run some-image 而不指定命令并且它有效。

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

这是由于 MinGW Posix Path Convertion

我找到了两个解决方法。

路径用双斜杠//开头,MSYS不会翻译路径:

docker run myimage //usr/src/venv/bin/python test.py
                   ^^this

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

来源:

How to stop mingw and msys from mangling path names given at the command line?

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