在 WSL2的 Ubuntu 20.04 中安装 Docker
WSL1升级到WSL2参考:WSL1升级到WSL2注意事项-CSDN博客
1. 更新系统包
首先,确保系统包是最新的:
sudo apt update
sudo apt upgrade -y
sudo apt upgrade -y
是 Ubuntu/Debian Linux 系统中的一条命令,用于升级所有已安装的软件包。-y的作用:自动回答 "yes"(是),跳过确认提示。
默认情况下,apt upgrade
会列出要升级的软件包,并询问你是否确认升级(显示 Do you want to continue? [Y/n]
),加上 -y
后,系统会自动同意,适合脚本或无人值守操作。
2. 安装依赖包
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
3. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
GPG 密钥(GNU Privacy Guard key)是一种用于验证软件包真实性和完整性的加密密钥,属于公钥基础设施(PKI)的一部分。它的核心作用是确保你下载的 Docker 软件包或仓库元数据确实来自 Docker 官方,而非被篡改或伪造的版本。
Docker 使用 GPG 密钥对其发布的软件包(如 .deb
、.rpm
文件)或仓库元数据(如 InRelease
文件)进行数字签名。系统在安装前会通过公钥验证签名,确认文件未被第三方篡改。
在通过 HTTPS 下载软件时,GPG 密钥提供了额外的安全层。即使网络传输被拦截,攻击者也无法伪造有效的签名。
如果软件包在传输或存储过程中损坏,签名验证会失败,提示用户文件不完整。
在 Linux 系统中,并非所有软件都强制使用 GPG 密钥验证,但其使用广泛程度取决于软件的分发方式、仓库维护者的策略以及用户的安全意识。以下是不同场景下的具体情况:
官方主流发行版的软件仓库(强制验证)
-
Debian/Ubuntu (APT)、RHEL/CentOS (YUM/DNF)、Fedora、openSUSE 等主流发行版的官方仓库会对其所有软件包进行 GPG 签名。包管理器(如
apt
、dnf
、zypper
)默认要求验证签名,否则会拒绝安装。-
例如:在 Debian 中运行
apt update
时,会下载InRelease
或Release.gpg
文件,用发行版官方的 GPG 密钥验证仓库元数据的真实性。 -
如果签名验证失败,你会看到类似
NO_PUBKEY
或BADSIG
的错误。
-
第三方仓库(通常需要验证,但依赖维护者)
-
Docker、Kubernetes、NodeSource 等 第三方提供的仓库通常也会发布 GPG 密钥,但需要用户手动导入(如 Docker 的
docker-archive-keyring.gpg
)。
直接下载的二进制或脚本(依赖开发者)
源码编译安装(通常无自动验证)
4. 添加 Docker APT 仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 更新 APT 包索引
sudo apt update
6. 安装 Docker CE
sudo apt install -y docker-ce docker-ce-cli containerd.io
7. 启动 Docker 服务(WSL 特殊处理)
默认情况下 WSL2 不支持 systemd
,但可以手动安装配置:
sudo apt update && sudo apt install -y dbus-user daemonize
echo -e "#!/bin/sh\nexec /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target" | sudo tee /usr/sbin/start-systemd
sudo chmod +x /usr/sbin/start-systemd
echo -e "[boot]\ncommand = /usr/sbin/start-systemd" | sudo tee -a /etc/wsl.conf
关闭 WSL2 终端后重启(wsl --shutdown
),然后启动 Docker:
sudo systemctl start docker
输出示例(如果正常运行):
● docker.service - Docker Application Container EngineLoaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)Active: active (running) since Wed 2025-04-09 10:00:00 CST; 1min agoDocs: https://docs.docker.comMain PID: 1234 (dockerd)Tasks: 8Memory: 50.0MCGroup: /system.slice/docker.service└─1234 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
在 WSL2 的 Ubuntu 中,当你运行 sudo systemctl status docker
后,命令会持续输出 Docker 服务的实时状态日志,并占用当前终端(类似“实时监控”模式),导致你无法直接输入其他命令。这是正常行为,因为 status
命令默认会保持活跃状态(除非服务已停止)。
如何退出状态查看并恢复终端?
-
按
Ctrl+C
直接中断当前状态输出,即可返回终端输入模式。
-
如果想后台运行并释放终端
加上
--no-pager
参数禁止分页输出:
sudo systemctl status docker --no-pager
其他常见场景
只想查看一次状态(不持续占用终端)
sudo systemctl status docker --no-pager
# 或
sudo service docker status # 传统 sysvinit 命令
想持续监控日志但保留终端输入
新开一个终端窗口(WSL2 支持多标签),或在原终端使用 &
后台运行:
sudo journalctl -u docker.service -f &
(-f
表示实时跟踪日志,&
表示后台运行)
相关文章:
在 WSL2的 Ubuntu 20.04 中安装 Docker
WSL1升级到WSL2参考:WSL1升级到WSL2注意事项-CSDN博客 1. 更新系统包 首先,确保系统包是最新的: sudo apt update sudo apt upgrade -y sudo apt upgrade -y 是 Ubuntu/Debian Linux 系统中的一条命令,用于升级所有已安装的软…...
LeetCode 252 会议室题全解析:Swift 实现 + 场景还原
文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在这篇文章中,我们将深入探讨LeetCode第252题“会议室”的问题,提供一个用Swift编写的解决方案,并结合实际场景进行分析。通过这篇文章,你将…...
Postman的内网使用教程
在软件开发和测试过程中,接口测试是确保系统间通信正常的重要环节。当处于内网环境,无法直接访问外网资源时,如何高效地使用Postman进行接口测试也逐渐成为许多开发者关心的问题。 前期准备 安装Postman 从官方网站下载并安装最新版本的Pos…...
【软件测试】Postman中如何搭建Mock服务
在 Postman 中,Mock 服务是一项非常有用的功能,允许你在没有实际后端服务器的情况下模拟 API 响应。通过创建 Mock 服务,你可以在开发阶段或测试中模拟 API 的行为,帮助团队成员进行前端开发、API 测试和集成测试等工作。 Mock 服…...
【NLP 57、LLM通用能力评价方式】
人生如题,放下,是最优雅的解法 —— 25.4.9 目前,我们通过一些特殊的“集合”来评价大语言模型效果 一、MMLU 集合 测量大规模多任务语言理解 评估模型在57个学科领域的综合知识理解能力,覆盖人文、社科、STEM&…...
centos7.9升级OpenSSL 1.1.1
centos7.9升级openssl 人工智能已经很准了: 问题: [rootcentos01 ~]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 [rootcentos01 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 需要升级OpenSSL,请给出具体…...
10A 大电流 DCDC 降流芯片 WD5030
10A 大电流 DCDC 降压芯片 WD5030 在电子设备的电源管理领域,高效稳定的 DCDC 芯片至关重要。今天我们来深入探讨一款性能卓越的 10A 大电流 DCDC 降流芯片 ——WD5030。它在众多电子应用场景中展现出了强大的优势,为各类设备的稳定供电提供了可靠保障。…...
# 基于BERT的文本分类
基于BERT的文本分类项目的实现 一、项目背景 该文本分类项目主要是情感分析,二分类问题,以下是大致流程及部分代码示例: 二、数据集介绍 2.1 数据集基本信息 数据集自定义类型二分类(正面/负面)样本量训练集 验证…...
Verilog学习-1.模块的结构
module aoi(a,b,c,d,f);/*模块名为aoi,端口列表a、b、c、d、f*/ input a,b,c,d;/*模块的输入端口为a,b,c,d*/ output f;;/*模块的输出端口为f*/ wire a,b,c,d,f;/*定义信号的数据类型*/ assign f~((a&b)|(~(c&d)));/*逻辑功能描述*/ endmoduleveirlog hdl 程…...
界面控件DevExpress WPF v25.1新功能预览 - 数据网格、报表性能增强
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
【创新实训个人博客】prompt嵌入
通过对camel技术的理解,修改了项目内容 能够初步实现广告内容相关的文本 修改了typing.py中的定义 class RoleType(Enum): ASSISTANT "assistant" USER "user" CRITIC "critic" EMBODIMENT "embodiment" DEFAULT &q…...
Linux 进程的替换
进程程序替换 要讲好这个我为大家准备了五个步骤 1. 先用代码给大家展示一下现象 2.解释原理 3.将代码改成多进程版 4.使用所有的方法,并认识函数参数的含义。 5.其他 我们现在开始第一个 1. 先用代码给大家展示一下现象 关于进程的替换一共有七个函数&…...
netty启用websocket的压缩机制
netty启用websocket的压缩机制 package com.aerotop.connector.websocket.base;import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.compression.JZlibDec…...
【python】针对Selenium中弹框信息无法定位的问题,以下是综合解决方案及注意事项:
一、常见原因分析 1.1 弹窗类型不匹配 若弹窗为alert,需使用driver.switch_to.alert处理; 若为confirm或prompt,同样适用该方法。 1.2 窗口句柄切换问题 新窗口或弹窗可能开启新句柄,需先通过driver.window_handles切换到对应句…...
进程与信号
前言 接触计算机的时候我们就接触过信号。比如说当我们进程卡死的时候,windows系统会跳出来一个弹窗告诉我们是否等待进程响应,如果关闭进程那么系统就会发信号给进程然后终止掉它。再比如我们打开任务管理器的时候,想要关闭进程那也是在发送…...
SQL解析器:实现进阶功能
SQL解析器:实现进阶功能 在上一篇文章中,我们介绍了SQL解析器的基础架构和核心功能实现,包括基本的SELECT、INSERT、UPDATE语句解析。本文将深入探讨SQL解析器的进阶功能实现,重点关注我们新增的DROP、JOIN、DELETE语句解析以及嵌…...
字体从版权合规到技术适配,你好字库全场景解决方案解析
一、开发者字体使用的三大核心困境 在软件开发与设计过程中,字体选择往往成为「甜蜜的负担」: 版权风险高:商业项目误用未授权字体,可能面临数万元赔偿(某创业公司曾因使用「方正粗黑」被索赔 8 万元) …...
深入理解 Java ArrayList 扩缩容机制(含源码分析)
标签: Java, ArrayList, 集合框架, 源码分析, 扩容机制, 性能优化, CSDN 摘要: java.util.ArrayList 作为 Java 集合框架中最常用的类之一,其动态数组的特性深受开发者喜爱。然而,“动态”背后的扩容与缩容机制是怎样的ÿ…...
LeetCode详解之如何一步步优化到最佳解法:26. 删除有序数组中的重复项
LeetCode详解系列的总目录(持续更新中): LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)-CSDN博客 LeetCode详解系列的上一题链接: LeetCode详解之如何一步步优化到最佳解法…...
doris基础使用
目录 1、一般使用 2、数据源通过catalog连接 1、es 2、clickhouse 3、db2 3、问题 (1)doris连接es一直报错 1、一般使用 (1)查询doris的catalog show catalogs; (2)查询catlog的连接信息 以catalog…...
Python 3.x cxfreeze打包exe教程
Python 3.x cxfreeze打包exe教程 https://blog.csdn.net/qq_33704787/article/details/123926953 去官网 下载安装 pip install cx-Freeze7.2.9 https://pypi.org/project/cx-Freeze/7.2.9/ 安装到 你的 python 的 script文件夹下面 (全局或是 虚拟环境都行&#x…...
SQL开发的智能助手:通义灵码在IntelliJ IDEA中的应用
SQL 是一种至关重要的数据库操作语言,尽管其语法与通用编程语言有所不同,但因其在众多应用中的广泛使用,大多数程序员都具备一定的 SQL 编写能力。然而,当面对复杂的 SQL 语句或优化需求时,往往需要专业数据库开发工程…...
nginx或tengine服务器,配置HTTPS下使用WebSocket的线上环境实践!
问题描述: HTTPS 下发起WS连接,连接失败,Chrom 浏览器报错。 socket.js:19 Mixed Content: The page at https://app.XXX.com was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint ws://172.16.10.80:903…...
原创工具scoopex - scoop增强工具,提供github proxy和url净化功能
说明 scoop是一款十分优秀的windows下软件管理工具,但是在国内使用,总会遇到网络问题,不得不翻墙或者梯子才能解决。 网上有很多提供了cn版本的bucket,虽然解决了一些问题,但是也带来了默认proxy不可用问题࿰…...
TPS入门DAY03 服务器篇
1.创建按钮和对应的回调函数 /* 大厅按钮 */UPROPERTY(meta (BindWidget))UButton* HostButton;/* 加入会话按钮 */UPROPERTY(meta (BindWidget))UButton* JoinButton;private:UFUNCTION()void OnHostButtonClicked();UFUNCTION()void OnJoinButtonClicked(); 创建调试助手 …...
STM32单片机入门学习——第30节: [9-6] FlyMcu串口下载STLINK Utility
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.09 STM32开发板学习——第30节: [9-6] FlyMcu串口下载&STLINK Utility 前言开发…...
基于springboot钻孔数据管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 本钻孔数据管理系统采用B/S架构,数据库是MySQL,网站的搭建与开发采用了先进的Java语言、Hadoop、数据可视化技术进行编写,使用了Spring Boot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。用户主要功能包括&…...
asp.net core 项目发布到 IIS 服务器
目录 一、VS2022 发布 二、设置IIS服务 三、配置IIS管理器 (一)打开IIS管理器 (二)添加站台 (三)配置应用程式集区 四、安装ASP.NET Core Hosting Bundle 五、设定IIS的日志位置 六、测试 一、VS2…...
自动化 Markdown 图片上传到 GitHub
自动化 Markdown 图片上传到 GitHub 1. 代码介绍 本代码用于自动扫描指定目录下的 Markdown 文章,提取其中的本地图片,并上传到 GitHub 仓库,最后替换文章中的图片路径,实现图片的托管和访问加速。 2. 主要功能 读取本地配置文…...
Java中23种设计模式之代理模式
一、什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,其核心思想是: 通过引入一个代理对象作为中间层,控制对目标对象(真实对象)的访问,并在访问前后添加…...
git单独跟踪远程分支及处理合并异常情况
在 Git 中,自动跟踪远程分支(Tracking Remote Branch)是指: 当你创建一个本地分支时,让它直接关联(绑定)到对应的远程分支。这样,后续的 git pull、git push 等操作可以省略参数&…...
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
口腔小程序 目录 基于微信小程序的口腔门诊预约系统的设计与实现 一、前言 二、系统功能设计 三、系统实现 1、小程序前台界面实现 2、后台管理员模块实现 四、数据库设计 1、实体ER图 2、具体的表设计如下所示: 五、核心代码 六、论文参考 七、最新计算…...
Windows本地账户后门被关,微软强制使用在线账户
初次接触Windows10或者Windows11的同学应该都被微软一开始激活注册的在线账户坑过吧。 一切都按照微软的正向指引激活步骤,但到了账户注册的步骤时,不明所以的小白会按照微软的步骤进行新注册账户。 但坑就在这里,由于微软的账户服务器在国外…...
分类算法的介绍和应用场景
分类算法 1.算法介绍 和聚类是有区别的聚类是没有标签的 数据集中必须包含明确的类别标签,即已知每个样本所属的类别。这些标签作为学习的目标,指导模型的训练过程。 2.应用场景 广泛应用于需要对数据进行明确分类和预测的场景,如医疗诊断…...
将 CrewAI 与 Elasticsearch 结合使用
作者:来自 Elastic Jeffrey Rengifo 学习如何使用 CrewAI 为你的代理团队创建一个 Elasticsearch 代理,并执行市场调研任务。 CrewAI 是一个用于编排代理的框架,它通过角色扮演的方式让多个代理协同完成复杂任务。 如果你想了解更多关于代理…...
n8n自动化之添加jenkins
n8n自动化之添加jenkins Jenkins添加Api Token 点击“账户”点击“设置” 添加API Token 找到API Token,点击“添加新 Token”输入用户名点击“生成” 复制并保存秘钥 用生成token的用户名和密码填充下面的用户名和密码Jenkins instance URL是Jenkins文件夹的…...
DFS--
数字的全排列 #include <bits/stdc.h> using namespace std;//最大的排列数目 const int N10; int n; //存储排列的路径 int path[N]; //标记数字是否已经被使用 bool st[N];void dfs(int u){//到达递归边界,输出一个排列if(un){//输出循环for(int i0; i<…...
Vue:路由切换表格塌陷
目录 一、 出现场景二、 解决方案 一、 出现场景 当路由切换时,表格操作栏会出现行错乱、塌陷的问题 二、 解决方案 在组件重新被激活的时候刷新表格 <el-table ref"table"></el-table>activated(){this.$nextTick(() > {this.$refs[t…...
Ubuntu进入Recovery模式遇到问题
Ubuntu进入Recovery模式需要按ESC,但是没人告诉你进入后并不显示Advanced option.... 这种菜单,而是下面这个界面: 我分别测试了Ubuntu18和24的版本,都存在这个问题,就是不管你按一次ESC还是一直按着ESC都会进入到这个模式里。 非…...
淘宝API驱动跨境选品:多语言详情页自动翻译与本地化定价
淘宝 API 驱动跨境选品实现多语言详情页自动翻译与本地化定价,为跨境电商业务带来诸多便利与优势,以下是详细介绍: 一、多语言详情页自动翻译 技术原理 借助淘宝的 API 接口,获取商品详情页的各类文本信息,包括标题、描…...
IDEA 2024 Maven 设置为全局本地仓库,避免新建项目重新配置maven
使用idea创建Java项目时每次都要重新配置Maven,非常麻烦。其实IDEA可以配置全局Maven。方法如下: 1.关闭所有项目进入初始页面 2.选择所有配置 3.设置为自己的路径...
C++类成员内存分布详解
本文将探讨C类中成员变量的内存分布情况,包括普通成员、静态成员、虚函数等不同情况下的内存布局。 一、基本成员内存布局 1. 普通成员变量 普通成员变量按照声明顺序在内存中连续排列(受访问修饰符和内存对齐影响): class Nor…...
【PVR】《Palm Vein Recognition and Large-scale Research based on Deep Learning》
邬晓毅. 基于深度学习的掌静脉识别及规模化研究[D]. 四川:电子科技大学,2024. 文章目录 1、背景2、相关工作3、创新点和贡献4、方法和实验4.1、知识介绍4.2、基于自适应损失函数的掌静脉识别算法研究4.3、退化图像的掌静脉识别鲁棒性提升研究4.4、掌静脉识别系统规模化 5、总结…...
【码农日常】vscode编码clang-format格式化简易教程
文章目录 0 前言1 工具准备1.1 插件准备1.2 添加.clang-format1.3 添加配置 2 快速上手 0 前言 各路大神都说clangd好,我也来试试。这篇主要讲格式化部分。 1 工具准备 1.1 插件准备 照图安装。 1.2 添加.clang-format 右键添加文件,跟添加个.h或者.c…...
CExercise_08_字符串_2统计该字符串中每个字符出现的次数,统计过程中忽略大小写的差异,并打印最终每个字符出现的次数。
题目:CExercise_ 给定一个字符串,要求它可能包含数字和字母。 请编写函数,统计该字符串中每个字符出现的次数,统计过程中忽略大小写的差异,并打印最终每个字符出现的次数。 提示: 用一个int数组存储字符出现…...
LabVIEW 中 JSON 数据与簇的转换
在 LabVIEW 编程中,数据格式的处理与转换是极为关键的环节。其中,将数据在 JSON 格式与 LabVIEW 的簇结构之间进行转换是一项常见且重要的操作。这里展示的程序片段就涉及到这一关键功能,以下将详细介绍。 一、JSON 数据与簇的转换功能 &am…...
分布式文件存储系统FastDFS
文章目录 1 分布式文件存储1_分布式文件存储的由来2_常见的分布式存储框架 2 FastDFS介绍3 FastDFS安装1_拉取镜像文件2_构建Tracker服务3_构建Storage服务4_测试图片上传 4 客户端操作1_Fastdfs-java-client2_文件上传3_文件下载4_获取文件信息5_问题 5 SpringBoot整合 1 分布…...
DNS域名解析(以实操为主)
目录 一.正向解析(在Linux下) 1.1什么是正向解析 1.2具体操作 1编辑主配置文件 /etc/named.conf 2编辑域名文件 /etc/named.rfc1912.zones 3根据域名文件中定义的名称,来建立数据库文件 4重启服务 5验证 二.正向解析(在…...
Spark运行架构 RDD相关概念Spark-Core编程
以下是今天学习的知识点: 第三节 Spark运行架构 运行架构 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。 核心组件 对于 Spark 框架有两个核心组件: Driver Spark 驱动器节点,用…...
校园智能硬件国产化的现状与意义
以下是校园智能硬件国产化的现状与意义: 现状 政策支持力度大:近年来,国家出台了一系列政策推动教育数字化和国产化发展。如2022年教育部等六部门印发《关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》,明确提出…...