我正在使用 Windows Powershell(在 Windows 10 上)。我也在使用最新版本的docker桌面2.3.0.5。当我在 powershell 中输入“docker version”时,该命令无法识别。错误消息显示“Der angegebenen Datei ist keine Anwendung zugeordnet”。 (英语:没有应用程序分配给指定的文件)。当我包含文件扩展名并输入“docker.exe version”时,可以执行该命令。有趣的是,“docker 版本”可以在 cmd 窗口中运行,但由于某种原因不能在 powershell 中运行。扩展名“.exe”包含在 Windows 环境变量 PATHEXT 中。
它在 powershell 中不起作用的原因可能是什么?
PS:我之前安装过旧版本的docker。那里一切都运转良好。然后我更新到最新版本。之后我就无法再使用现有的 docker 容器了。所以我卸载了旧版本并安装了2.3.0.5版本。从那时起我就遇到了这个问题。
最佳答案
tl;博士:
运行
Get-Command -All docker | ForEach-对象路径
在返回的文件路径中,删除那些不以
*.exe 结尾的文件
(使用Remove-Item
)。
最可能的解释是,在系统路径 ($env:PATH
) 中的一个目录中,位于之前
>docker.exe 位于,包含另一个文件,其基本名称是docker
:
任一:它是一个无扩展名文件,字面意思是完全命名为
docker
[< em>这就是问题所在]。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
会打开一个具有该名称的文件,该文件位于关联编辑器中具有此类文件的路径中的第一个文件夹中)。对于无扩展名的文件,显然没有要包含的扩展名,这就是为什么可能会与具有相同基本名称的 *.exe
文件混淆(除非您调用与 .exe
);如果这两个文件位于路径中的相同目录中,则*.exe
文件优先,但如果无扩展名文件位于列出的不同目录路径中的较早,它优先。
关于powershell - Windows powershell 中无法识别命令 "docker",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63980371/