在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图像,因此不应查看{{1} },因此我必须得出结论,它是在本地而不是在容器内寻找该命令。
注意:我正在运行的Docker是在msys2中添加到我的C:
的Windows的Docker。
$PATH
我使用的一种解决方法是创建一个新的Dockerfile,该文件只有一行要使用我想要的映像,而另一行是我想要的命令。然后,我可以运行$ which docker
/c/Program Files/Docker/Docker/Resources/bin/docker.exe
而无需指定命令,它可以工作。
是否可以通过某种方式在msys2中解决此问题,而无需上述烦人的解决方法?
答案 0 :(得分:3)
这是由于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