【问题标题】:Command "docker" not recognized in windows powershellWindows powershell 中无法识别命令“docker”
【发布时间】:2020-09-21 01:40:50
【问题描述】:

我正在使用 Windows Powershell(在 Windows 10 上)。我也在使用 docker desktop 的最新版本 2.3.0.5。当我在 powershell 中键入“docker version”时,无法识别该命令。错误消息显示为“Der angegebenen Datei ist keine Anwendung zugeordnet”。 (英语:没有应用程序分配给指定的文件)。当我改为包含文件扩展名并键入“docker.exe 版本”时,可以执行该命令。有趣的是,“docker version”在 cmd 窗口中工作,但由于某种原因不在 powershell 中。扩展名“.exe”包含在 Windows 环境变量 PATHEXT 中。

它在 powershell 中不起作用的原因可能是什么?

PS:我之前安装了旧版本的 docker。那里一切正常。然后我更新到最新版本。在那之后,我不能再使用我现有的 docker 容器了。所以我卸载了旧版本,安装了2.3.0.5版本。从那以后我就有这个问题了。

【问题讨论】:

    标签: powershell docker


    【解决方案1】:

    tl;博士:

    • 运行Get-Command -All docker | ForEach-Object Path

    • 在返回的文件路径中,去掉那些不以*.exe结尾的路径(使用Remove-Item)。


    最可能的解释是,在 系统路径 ($env:PATH) 中的一个目录中,docker.exe 所在的目录之前,包含另一个基本名称docker的文件:

    • 任一个:它是一个无扩展名文件,字面意思是docker [这就是问题所在原来是]。

      • PowerShell 意外地尝试执行这个无扩展名的文件,因为它认为它是可执行的,尽管 - 根据定义 - 没有通过 PATHEXT 环境变量 ($env:PATHEXT) 指定为可执行的扩展名。[1 ]

        • 这可以解释 cmd.exe 的不同行为,因为它从不认为无扩展名的文件是可执行文件。
      • 大概是旧 Docker 版本的卸载删除了原来的docker.exe,但在后面的同一目录中留下了一个无扩展名的docker 文件(可能是一个Unix shell 脚本)。

    • 或者:它确实有一个扩展名(*.exe 除外),它:

      • 指的是不是直接可执行的文件,需要一个解释器——一个单独的可执行文件——才能被执行

      • 并且该扩展名列在PATHEXT 环境变量中

      • 文件扩展名(例如,.py)和相关解释器(有关的信息)之间的关联(现在)丢失,可能是由于卸载了旧的 Docker 版本.


    [1] 事实上,PowerShell 意外地将 任何 文件扩展名视为可执行文件 - 请参阅 GitHub issue #12632
    但是,对于那些PATHEXT 中列出的扩展,只有在您包含文件扩展名在仅文件名调用中时,通过路径执行才有效 (例如,执行file.txt 会打开该名称的文件,该文件位于关联编辑器中具有此类文件的路径中的第一个文件夹中)。对于扩展名less 文件,显然没有要包含的扩展名,这就是为什么可能与具有相同基本名称的*.exe 文件混淆(除非您调用 with .exe);如果这两个文件都位于路径中的 same 目录中,则 *.exe 文件优先,但如果无扩展名文件位于 earlier 中列出的不同目录中路径,it 优先。

    【讨论】:

    • 谢谢你。最后 docker 命令在 powershell 中再次工作,因此我不必添加扩展名“.exe”。有两条路径以 docker 结尾但没有扩展名“.exe”,我必须使用 Remove-Item 删除它们。
    猜你喜欢
    • 2014-08-21
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    相关资源
    最近更新 更多