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
在 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