Bash 在 WSL 上找不到 docker(或任何命令),即使它在路径中
Bash on WSL cannot find docker (or any command) even though it is in the path
我正在尝试使用 WSL1 在 Windows 上执行 bash 脚本。此脚本包含对命令的调用,如下所示:
script.sh
:
echo $PATH
docker --version
在使用 bash script.sh
从命令行执行后,它 returns PATH
,其中包括 Windows 路径,包括此 Docker 路径:
/mnt/host/c/Program Files/Docker/Docker/resources/bin
然后 returns command not found
.
我确实安装了 Docker 桌面版。
Windows PATH 中的任何其他命令也会发生这种情况。我想我不知道如何将 Windows 路径整合到 bash?
任何人都可以帮助我知道我做错了什么吗?
简短回答,尝试 docker.exe --version
,但请注意下面“详细信息”部分中的注意事项。
详情:
总结一下:
- 你在 WSL1
- 您在 Windows
中安装了 Docker 桌面
- 您的
$PATH
显示目录 /mnt/host/c/Program Files/Docker/Docker/resources/bin
在 WSL 搜索路径中。
- 尝试执行
docker --version
(或路径上的任何其他 Windows 命令)失败并返回 command not found
正如您所知,WSL(版本 1 和 2)的互操作特性:
- 将 Windows 路径附加到您的 Linux 路径
- 允许执行 Windows 个二进制文件
然而,Linux 没有“文件扩展名”的概念来确定某物是否可执行。在 Linux 下,您确实需要键入完整的文件名,包括 .exe
扩展名,以便它执行。
注意事项
一般来说,请记住 Windows 命令 也 需要您提供 Windows 路径.例如,运行ning notepad.exe ~/myfile
不会起作用,因为 Windows 没有 ~
的概念,甚至 /home/<yourusername>
或任何其他 Linux路径。对于 Windows,这将类似于 \\wsl$\<distroname>\home\<yourusername>\myfile
。 (旁注:无论如何不要使用记事本创建 Linux 文件——行结尾将是 DOS/Windows 而不是 Unix/Linux。)
对于 Docker,请特别注意,您仍然需要 运行 Docker 引擎本身 某处 。这可以是:
- Docker Desktop 创建和管理的 WSL2 实例(默认,推荐)
- A Hyper-V 虚拟机(“旧方法”)
- 您通过
DOCKER_HOST
环境变量指向的远程 Docker 守护程序
无论如何,我不清楚您为什么要从 WSL1 尝试此操作,因为您仍然需要 Windows 系统支持虚拟化才能使用前两种方法中的任何一种。
对于第三个选项,指向远程主机,您将 运行 陷入一个问题,因为 Windows' 可执行文件不能(通常)获取 Linux 环境变量。如果需要,您需要查看 WSLENV 才能处理此问题。
一般来说,虽然您将能够 docker.exe --version
在 WSL1 中工作,但请注意您可能会 运行 遇到更复杂场景的其他问题。
它比 WSL2 中的 运行 docker
更受欢迎。 Docker Desktop 会自动 link 一个 docker
(不是 docker.exe
)到你的 WSL2 发行版中,这将与 Linux-side 的东西完全兼容。
我正在尝试使用 WSL1 在 Windows 上执行 bash 脚本。此脚本包含对命令的调用,如下所示:
script.sh
:
echo $PATH
docker --version
在使用 bash script.sh
从命令行执行后,它 returns PATH
,其中包括 Windows 路径,包括此 Docker 路径:
/mnt/host/c/Program Files/Docker/Docker/resources/bin
然后 returns command not found
.
我确实安装了 Docker 桌面版。
Windows PATH 中的任何其他命令也会发生这种情况。我想我不知道如何将 Windows 路径整合到 bash?
任何人都可以帮助我知道我做错了什么吗?
简短回答,尝试 docker.exe --version
,但请注意下面“详细信息”部分中的注意事项。
详情:
总结一下:
- 你在 WSL1
- 您在 Windows 中安装了 Docker 桌面
- 您的
$PATH
显示目录/mnt/host/c/Program Files/Docker/Docker/resources/bin
在 WSL 搜索路径中。 - 尝试执行
docker --version
(或路径上的任何其他 Windows 命令)失败并返回command not found
正如您所知,WSL(版本 1 和 2)的互操作特性:
- 将 Windows 路径附加到您的 Linux 路径
- 允许执行 Windows 个二进制文件
然而,Linux 没有“文件扩展名”的概念来确定某物是否可执行。在 Linux 下,您确实需要键入完整的文件名,包括 .exe
扩展名,以便它执行。
注意事项
一般来说,请记住 Windows 命令 也 需要您提供 Windows 路径.例如,运行ning notepad.exe ~/myfile
不会起作用,因为 Windows 没有 ~
的概念,甚至 /home/<yourusername>
或任何其他 Linux路径。对于 Windows,这将类似于 \\wsl$\<distroname>\home\<yourusername>\myfile
。 (旁注:无论如何不要使用记事本创建 Linux 文件——行结尾将是 DOS/Windows 而不是 Unix/Linux。)
对于 Docker,请特别注意,您仍然需要 运行 Docker 引擎本身 某处 。这可以是:
- Docker Desktop 创建和管理的 WSL2 实例(默认,推荐)
- A Hyper-V 虚拟机(“旧方法”)
- 您通过
DOCKER_HOST
环境变量指向的远程 Docker 守护程序
无论如何,我不清楚您为什么要从 WSL1 尝试此操作,因为您仍然需要 Windows 系统支持虚拟化才能使用前两种方法中的任何一种。
对于第三个选项,指向远程主机,您将 运行 陷入一个问题,因为 Windows' 可执行文件不能(通常)获取 Linux 环境变量。如果需要,您需要查看 WSLENV 才能处理此问题。
一般来说,虽然您将能够 docker.exe --version
在 WSL1 中工作,但请注意您可能会 运行 遇到更复杂场景的其他问题。
它比 WSL2 中的 运行 docker
更受欢迎。 Docker Desktop 会自动 link 一个 docker
(不是 docker.exe
)到你的 WSL2 发行版中,这将与 Linux-side 的东西完全兼容。