当前位置: 首页 > 知识库问答 >
问题:

Docker映像中缺少WSL发行版

姬裕
2023-03-14

试图围绕Docker、WSL2、发行版、图像和容器进行思考。WSL发行版和Docker映像有什么区别?查看以下两个快照,看起来这些是不同的东西:

WSL中已安装的发行版列表:

Docker Desktop中的图像列表:

Alpine和Ubuntu列在附加发行版列表中,但没有出现在图像列表中。

我应该如何将一个已安装的WSL发行版(Alpine或Ubuntu)作为容器运行并到达它的终端?最后,我可以从这个容器中启动Ubuntu的桌面用户界面吗?

共有1个答案

申屠瀚海
2023-03-14

从使用的角度来看,Docker图像和WSL发行版是两个完全不同的东西。

在过度简化的情况下,比较和解释两者:

> < li>

WSL发行版包含您用来与使用Linux的应用程序进行交互和开发应用程序的工具。这包括您的shell(在Ubuntu中默认为bash)和< code>docker客户端(由Docker Desktop提供)。

Docker 映像是用作 Docker 容器的起点。

你提供的第三个屏幕截图是“设置”对话框,它允许你选择应将哪些 WSL 映像与 Docker 集成。请尝试以下操作:

  • 在该设置中关闭乌班图
  • 应用并重新启动泊坞窗桌面
  • 通过从“开始”菜单(或者最好是 Windows 终端,如果已安装,则最好是 Windows 终端)运行它来启动 Ubuntu WSL 分发版。
  • 尝试运行泊坞窗命令

你应该发现它不在那里。

  • 在Docker Desktop的设置中重新打开Ubuntu
  • 应用并重新启动Docker桌面
  • 您不需要重新启动Ubuntu,但docker命令现在应该在那里。

Docker 桌面实际上为 docker 命令注入了一个链接:

    < li >来自< code>docker-desktop分发版 < li >进入您在该设置选项中选择的"用户"分发。

一般来说,在所有发行版中让它开着就可以了。

现在我知道你的下一个问题了:

首先,您需要将Docker图像放到您的计算机上:

  • Make sure you've enabled all WSL2 distributions again (not necessarily required, but you don't want to leave any off by mistake).
  • Start your Ubuntu distribution
  • Run:
    docker run --rm -it alpine
    

    Docker将检测到您没有安装Docker Alpine映像,拉取它并运行它。实际上,这是两个步骤的Docker简写:

    docker pull alpine
    docker run --rm -it alpine
    

    < code>-it选项用于“交互式”和“终端”。

    此时,您将处于在 Ubuntu WSL 发行版中运行的 BusyBox 外壳程序提示符(阿尔卑斯的默认值)。

    在退出之前,请返回 Docker 桌面并检查容器和映像的列表。你会知道的:

    • “阿尔卑斯”图像
    • 基于阿尔卑斯山图像运行的随机命名容器

    如果您在打开Ubuntu的情况下启动另一个终端,您可以运行:

    • docker ps向您显示容器信息
    • docker图像向您显示图像信息

    这与您在Docker Desktop中看到的信息基本相同。

    返回到第一个Ubuntu WSL2终端,它在BusyBox提示下运行Alpine容器。尝试在那里运行docker-它不起作用,因为这是基于Docker Alpine映像的容器,而不是您的WSL Alpine发行版。

    键入< code>exit或< kbd>Ctrl D退出该提示符,现在您将回到Ubuntu的bash提示符处。

    此时,您会注意到 Docker 容器现已消失,因为我们指定了 --rm 选项,该选项在进程结束时将其删除。如果我们没有这样做,它仍然会在 Docker 中显示为“已停止”容器。

    然而,你会发现阿尔卑斯山码头工人的形象仍然存在。一旦拖到您的机器上,Docker图像会一直存在,直到您删除它们。

    Docker映像和容器可能需要一点时间来理解,我可以理解WSL发行版中增加的混乱。稍微玩玩它们,阅读一些Docker教程,上面的信息很快就会开始有意义。

    旁注:上面有道理后回来读这个。

    Docker容器和WSL2发行版至少在其架构上有一个很大的相似之处——它们都是容器技术,只是不同。

    WSL2发行版实际上是在(隐藏的)WSL2 Hyper-V虚拟机中运行在自己命名空间中的容器。它们共享相同的内核和网络,但每个WSL2发行版/实例都有自己独立的PID和用户命名空间。

    这是Docker容器使用的核心概念。所以有了WSL2和Docker,我们真的可以运行:

    • WSL2 虚拟机内的 WSL2 分发“容器”
    • WSL2 分发容器内的泊坞站容器

 类似资料:
  • 我正在尝试在CI服务器上设置多个目标(CentOS 64_x86),以进行自动化的Android应用程序测试,这将不顾一切地运行多个模拟器。从 http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20130729.zip 中提取最新的SDK并运行后,android更新sdk --no-ui我想我应该正确安装所有现有组件,但发现了2个问题

  • 问题内容: 有什么方法可以手动下载Docker映像吗? 我的互联网连接速度非常慢,对我来说,最好获得图像的链接,然后以更高的互联网速度将其下载到其他位置, 如何获取由docker pull管理的映像的直接URL? 问题答案: 可能会得到,但让我提出另外两种建议! 如果可以通过快速连接连接到远程服务器,并且该服务器可以运行Docker,则可以在该服务器上,然后将映像(及其所有层和元数据)导出为tar

  • 我刚刚在Ubuntu上重新安装了Docker,使用了官方指南:https://docs.Docker.com/engine/installation/linux/Ubuntulinux/ 有人知道是什么引起的吗?或者能帮我解决这个问题吗?我依赖于这个层ID,因为我正在收集一些关于层重用性的统计数据,所以我需要这个ID来正确显示。

  • 我正在尝试从我的Java代码生成Jasper报告,我的Java应用程序是Swing。我使用设计了Jasper报告。然而,在我的报告中,有一个徽标图像。图像位置是动态传递的,在Jaspesoft Studio上预览时效果良好。以下是JasperSoft工作室中的图像设置。变量是 这就是我用Java生成报告的方式。 问题是,Java生成的报表没有图像!这是怎么了? 更新 我也尝试将用作,但这里有相同的

  • 问题内容: 我使用Java创建了一个Docker映像,并将jar文件复制到该映像中。我的Dockerfile是: 执行以下命令后: 在控制台中,我看到了应用程序的输出,一切都很好。但是当我停止图像时,我不知道如何再次运行图像?当我执行以下命令时: 该应用程序再次运行,但是在我的Dockerfile中,我已经编写了此命令。如何在不使用此命令的情况下运行映像并使应用程序自动运行? 问题答案: 图像和容