我最近在我的 Windows 10 PC 上安装了 Ubuntu 22.04 WSL。
我幼稚的理解是,这个 Ubuntu“应用程序”相当于一个 Linux 开发环境。
当我在正在运行的 Ubuntu 应用程序中进行探索时,它通常感觉就像我习惯的普通 Linux:shell 似乎是bash
,并且我可以访问诸如git
、curl
、man
等可执行文件。
相信这个 Ubuntu WSL 等同于 Linux 开发环境的说法,我现在想在这个 Ubuntu 实例中运行 Docker。
我幼稚的理解是“既然 Linux 原生支持容器,我应该在 Linux 上安装 Docker Engine”。
所以我按照此处描述的步骤操作:https
://docs.docker.com/engine/install/ubuntu/
但是当我尝试通过运行 hello-world 映像来验证 Docker 引擎是否已正确安装时,我收到以下错误:
$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
没有/var/run/docker.sock
,我不认为 Docker 守护进程正在运行:
$ ls -l /var/run/docker.sock
ls: cannot access '/var/run/docker.sock': No such file or directory
$ ps aux | grep containerd
user 10212 0.0 0.0 8164 732 pts/2 S+ 21:44 0:00 grep --color=auto containerd
有人可以帮我了解哪里出了问题,如果有纠正措施我可以在我的 Windows PC 上的这个 Ubuntu WSL 应用程序中成功安装 Docker 吗?
也许https://docs.docker.com/engine/install/ubuntu/上的说明仅适用于“Ubuntu 本机安装在主机 PC 上”,而不适用于在 Windows PC 上运行的 Ubuntu WSL?
如果是这样,那么我应该以其他方式“安装 Docker”,以便sudo docker run hello-world
可以从我的 Ubuntu WSL 中运行 Docker 命令吗?
我对这里涉及的所有软件层感到很困惑。
它实际上更像是在容器中运行 Ubuntu,因为它确实是. 在容器(例如 Docker Ubuntu 容器)中运行 Ubuntu 时,与物理机或虚拟机相比,您设置服务的方式有所不同。例如,Docker Ubuntu 容器中默认没有运行 Systemd。没有“登录”,因此没有 PAM。
我试图在这个 Ask Ubuntu answer中写下我能想到的尽可能多的差异和限制。
首先,对于大多数用户来说,在 Windows/WSL2 中安装 Docker 的推荐方式是通过Docker Desktop for Windows。
我在这个 Stack Overflow 答案中解释了为什么这更可取的一些原因。
虽然可以在 WSL2 实例中手动安装和运行 Docker Engine,但我在此答案中解释了一个关键区别。简而言之,Ubuntu 下的 Docker Engine 包会尝试通过 Systemd 启动守护进程,而 Systemd(如上所述)默认情况下不会在 WSL 上运行。在 WSL2 下的 Ubuntu 上,您需要首先使用以下命令启动守护进程: