【问题标题】:msys2 and docker run specifying the command: looks for the command locally before running in dockermsys2 和 docker run 指定命令:在 docker 中运行之前在本地查找命令
【发布时间】:2018-12-13 00:28:57
【问题描述】:

在 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:,所以我必须断定它是在本地而不是在容器内查找该命令。

注意:我正在运行的 Docker 是 Docker for windows 添加到我的 msys2 中的$PATH

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

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

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

【问题讨论】:

  • 只是为了解决问题,试试:docker run --entrypoint=/usr/src/venv/bin/python myimage test.py
  • 出于好奇,您是否尝试过使用myvolume:/。所以你的情况是docker run myvolume:/ myimage /usr/src/venv/bin/python test.py
  • @Robert,抱歉耽搁了。我试过了,得到了同样的错误
  • 它是否与双斜杠一起使用? docker run myimage //usr/src/venv/bin/python test.py
  • 是的!那完全做到了。非常感谢

标签: docker msys2


【解决方案1】:

这是由于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

【讨论】:

    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 2018-05-20
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多