WSL2 docker-desktop:构建因“符号链接级别太多”而失败,/mnt/wsl/docker-desktop-data/data/docker 未绑定在 /var/lib/docker

问题描述 投票:0回答:1

我是 docker、kubernetes 等的新手。我正在尝试设置 docker 环境,只是为了测试 Hello World!项目(假设从 Node.JS 开始)只是为了了解它是如何工作的。

目前,我唯一可行的临时结论是:WSL2+docker 不起作用。

我在 stackoverflow 等上花了几个小时才发现似乎没有一个能够实现 docker 的基本目的:构建一个简单的镜像(...然后部署它,也许使用 kubees&co 并执行基本的 curl 测试)。

为什么它不能开箱即用?这是一个笑话还是只是我的情况有一些无人注意的问题?

步骤

我创建了一个简单的项目:

Dockerfile:

FROM node:latest

RUN mkdir -p /dockerHelloJS

WORKDIR /dockerHelloJS

COPY index.js .

ENTRYPOINT ["node"]

index.js

const express   = require("express");
const app       = express();
const port      = process.env.HELLO_PORT || '8080';

app.get('/', (req, res) => {
    res.send('Hello World!');
});

app.listen(port, () => {
    console.log(`Started on port ${port}`);
});

注意:如果有语法错误,请原谅我,因为我还没有机会测试它!...

然后,我天真地在项目目录中尝试了以下命令:

docker build .

这会导致与不存在的目录结构甚至卷等相关的错误:

------
 > [1/4] FROM docker.io/library/node:latest@sha256:14bd39208dbc0eb171cbfb26ccb9ac09fa1b2eba04ccd528ab5d12983fd9ee24:
------
Dockerfile:1
--------------------
   1 | >>> FROM node:latest
   2 |
   3 |     RUN mkdir -p /dockerHelloJS
--------------------
ERROR: failed to solve: failed to register layer: error creating overlay mount to /var/lib/docker/overlay2/36a15fcda54210377bd4ae1b54d536119dca9b5b7558e33283a90d8bcab27305/merged: too many levels of symbolic links

确实:

$ namei /var/lib/docker/overlay2/36a15fcda54210377bd4ae1b54d536119dca9b5b7558e33283a90d8bcab27305/merged
f: /var/lib/docker/overlay2/36a15fcda54210377bd4ae1b54d536119dca9b5b7558e33283a90d8bcab27305/merged
 d /
 d var
 d lib
   docker - No such file or directory

好吧,坦率地说,如果 /var/lib/docker 不存在,那仅仅意味着 docker 的 WSL2 安装不起作用,故事结束了。修补有问题的业务不是由用户来完成的。

只是为了介绍我为了达到这一点而首先所做的事情:

  1. 我当时使用最新的 Ubuntu 22.04.2 LTS 从头开始安装了 WSL2。
  2. 我安装了 Docker Desktop,它创建了单独的虚拟机。
  3. 我在 Ubuntu VM 中安装了 minikube,因为我想测试 Kubernetes。
  4. 我配置了 docker also 出现在上述 Ubuntu VM 中(但是,为什么我们需要其中两个,docker 桌面和 ubuntu,嗯,这很奇怪)。

现在,我可以在创建一个似乎没有感觉的 docker 目录后,继续思考如何通过绑定到 /mnt/docker-desktop-data/data/docker 来挂载 /var/lib/docker 的一系列问题首先必须存在(这提出了为什么存在的问题)。为什么我们需要两个 docker 安装:一个在其正确的虚拟机中,另一个在任意数量的附加虚拟机中,我是否应该 sudo 我的 docker 命令,因为 /var/lib/docker 将是 root 拥有的挂载点(或者可能是它已经被su-id'ed了),等等,等等。但是谁在乎呢?只有一个有效问题:

问题

有人设法从 WSL2 Linux VM 构建一个项目吗?此时,即使在其他情况下也可以(我将尝试从我的 Windows 主主机进行 docker 构建,而不是使用 cmd)。

如果有人这样做了,请您慷慨地分享一下吗?

谢谢!

docker ubuntu build integration wsl-2
1个回答
0
投票

我并不自豪地报告在对 docker-desktop 执行完全清除和出厂重置并重新启动后,最终在 Ubuntu 和 Windows 下成功构建了(因为 docker 不会重新启动,而且我发现没有可操作的按钮或命令除了执行通常的windoze重启之外,还要这样做...)。

我并不骄傲,因为我一开始就不明白为什么它不起作用。

我可以确认 Ubuntu 本地 /var/lib/docker 目录或挂载点仍然不存在。无论如何,cmd docker 构建都给了它可用:它还希望该目录存在,这在 Windows 下是无意义的。

所以到目前为止,我不明白其背后的魔力(研究了一天后,没关系,我接受它)。

这也意味着,到目前为止以及我浏览过的 stackoverflow&co 页面中都没有解释为什么它不起作用。没有任何明确的方法来调查该问题。 /var/lib/docker 不存在于任何虚拟机上。因此,它要么是 Linux docker 安装的痕迹,要么是 Windows 版本中的一些神奇占位符,要么是其他东西。而且,这也意味着它可能会再次弹出,而手头只有一种解决方案:清除所有内容并重新启动。非常有前途。

欢迎任何解释,因为我不会假装在这里提供了任何有价值的东西。

提前致谢。

© www.soinside.com 2019 - 2024. All rights reserved.