Docker for Windows 和 WSL1 协同工作

xpt*_*xpt 4 docker windows-subsystem-for-linux

找不到与带有 docker 的 Ubuntu WSL完全相同的问题

$ docker

The command 'docker' could not be found in this WSL 1 distro.
We recommend to convert this distro to WSL 2 and activate
the WSL integration in Docker Desktop settings.

See https://docs.docker.com/docker-for-windows/wsl/ for details.
Run Code Online (Sandbox Code Playgroud)

但我的要求不同——我想

  • 坚持使用 WSL1(出于本主题之外的原因)
  • 并按原样使用 Docker for Windows

即,我将 WSL1 和 Docker for Windows 并行安装。这是我目前的信息:

C:> ver
Microsoft Windows [Version 10.0.18363.1379]

C:> wsl -l -v
  NAME      STATE           VERSION
* Debian    Running         1
Run Code Online (Sandbox Code Playgroud)

我在“资源 -> WSL 集成”中没有看到集成,并且我没有在 Docker 桌面设置中启用 WSL2 后端。

在此处输入图片说明

只是我遇到了上述问题——我docker在任何地方工作,在 CMD、Powershell、git-bash 等中,只是不在我的 WSL 中。

我发现的所有解决方案都是WSL1 或 WSL2 中安装适用于 Windows 的 Docker ,但我希望保持原样——WSL 和适用于 Windows 的 Docker彼此并行安装。

有什么解决办法吗?

atl*_*ine 9

在此 WSL 1 发行版中找不到命令“docker”。
我们建议将此发行版转换为 WSL 2 并
在 Docker 桌面设置中激活WSL 集成。

这意味着WSL2,它有它安装码头工人守护进程需要一个真正的Linux内核,那么docker-desktop你可以有机会在集码头工人守护进程WSL2。否则,docker 守护进程在Hyper-V machine. 但是,如果你坚持使用WSL1,就没有机会docker-daemon在 WSL 中运行,所以唯一的选择是docker daemonHyper-V machine.

虽然以上是事实,但我们仍然有机会让您像通过 bash 操作一样docker ps, docker pullWSL1bash 中操作等CMD, Powershell, git-bash,即允许 Docker 接受来自远程主机的请求

对于您的情况,接下来的步骤可能是:

1. 在docker desktop设置中暴露 docker daemon如下,然后点击Apply & Restart

在此处输入图片说明

2. 安装独立的 docker 客户端WSL1

$ wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.5.tgz
$ tar zxvf docker-20.10.5.tgz
$ cd docker
Run Code Online (Sandbox Code Playgroud)

3. 设置默认的 docker 守护进程:

$ export DOCKER_HOST=tcp://localhost:2375
Run Code Online (Sandbox Code Playgroud)

4.验证docker客户端命令:

$ ./docker info
Run Code Online (Sandbox Code Playgroud)


xpt*_*xpt 7

只是 FTA,这是我在尝试自己解决问题时发现的快速解决方法

将文件更改C:\Program Files\Docker\Docker\resources\bin\docker

#!/usr/bin/env sh
#
# Copyright (c) Docker Inc.

binary=$(basename "$0")
"$binary.exe" "$@"
Run Code Online (Sandbox Code Playgroud)

那么docker现在可以在任何地方工作,在CMDPowershellgit-bash、 以及WSL1

请注意,这个 hacky 解决方法专门针对 OP 中描述的情况,可能不适用于其他任何情况。