尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Ubuntu离线环境用.deb包安装Docker CE完整指南
把你困在一台不能连外网的Ubuntu服务器上然后要求“装个Docker”这种任务我第一次碰到时差点抓狂。那台机器在一个完全隔离的内网环境里既不能用官方脚本一键安装也没法指望apt从软件源拉更新。折腾了几轮之后我用.deb包方式把Docker CE装成功了而且整个流程验证下来在Ubuntu 20.04和22.04上都能重复。如果你也遇到类似的离线环境或者正在给多台内网机器批量装Docker这篇文章正好可以当一份能“抄作业”的清单来用。我把依赖怎么梳理、安装包怎么准备、离线机器上怎么装、装完怎么验证、不想要了怎么卸得干干净净全部捋了一遍最后还附上了我踩过的几个典型坑。1. 方案选型离线装Docker为什么我建议走.deb包路线1.1 常见的三种离线安装方案对比离线安装Docker并不是只有一条路。我自己试过的方案大致有三种各有各的适用场景这里先把它们放在一起对比一下方便你根据实际情况选。第一种是下载官方二进制tar包直接解压到系统目录里面用。这种方式最大的优点是不需要关心依赖下载一个包就够了。但代价是systemd服务脚本、环境变量、compose插件这些都需要自己手动补而且后续升级维护特别别扭卸载的时候也容易留一堆手工创建的垃圾文件。第二种是搭建一个内网软件源让目标机器通过apt源来安装。这个方案对于几十台、上百台机器的批量部署非常友好装完还能正常走apt升级。不过缺点是前期准备工作量大需要在内网服务器上同步一套完整的Docker源数据对小规模场景来说有点“杀鸡用牛刀”。第三种就是本文要详细讲的.deb包方式。在联网机器上下载好Docker CE及其依赖对应的.deb安装包拷贝到离线机器上通过dpkg或apt本地安装。它介于上面两种方案之间既不需要手工配置服务脚本也不用来回搬运几个G的软件源数据特别适合个位数的机器数量属于“单台少机器”场景下的最优解。1.2 .deb包方案的核心优势.deb包方案能成为我的首选主要是因为三个原因。第一依赖关系是明确的。Docker CE不是一个孤立的软件它依赖containerd、docker-ce-cli、iptables、libseccomp2等一系列组件。你用.deb包方式安装这些依赖可以一次性下载齐全然后在离线机器上按顺序装完。比起二进制包方式需要自己猜测缺什么这套流程可控得多。第二systemd服务是自动注册的。装完.deb包dockerd的systemd服务脚本就已经躺在/etc/systemd/system/下面了你只需要systemctl start docker就能启动不需要自己去写服务文件卸载时systemd配置也会跟着一起清理干净。第三卸载非常省心。用apt或dpkg安装的软件都有安装记录卸载的时候可以回溯文件清单。什么文件是装包时带过来的什么文件是运行时产生的数据分得清清楚楚。相比之下二进制包方式卸载的时候真的是一脸懵根本想不起来当初解压了哪些东西出来。1.3 这个方案适合谁我已经帮不少同事和朋友处理过类似问题总结下来.deb包离线安装方案最适合下面几类人运维或开发手头有一台不能连外网、但又有明确业务要跑的Ubuntu服务器需要在多台同版本Ubuntu上装同一个Docker版本希望保证环境一致性的人对“内网安全隔离”有要求不方便直接把系统接入外网下载软件的场景。如果只是在家里的Linux开发机上装Docker那完全可以直接在线装没必要折腾离线包。但如果你已经在为内网环境发愁下面的内容应该能帮你少走不少弯路。2. 动手前必做环境检查与依赖梳理2.1 用三条命令确认机器基本信息离线安装的第一步不是急着找安装包而是先搞清楚目标机器的准确信息。不同Ubuntu版本的Docker依赖版本不一样不同CPU架构对应的安装包也不同这一步错了后面全白搭。在目标机器上执行下面三条命令lsb_release -a uname -m uname -r第一条命令看Ubuntu版本号比如Ubuntu 22.04.3 LTS。第二条命令看CPU架构x86_64对应的deb包是amd64架构ARM服务器则可能是aarch64架构。第三条命令看内核版本Docker对内核有最低要求太老的内核装完也跑不起来。这三条信息确定下来你在联网机器上找安装包的时候才能有的放矢。我自己遇到过一个比较典型的错误在Ubuntu 22.04的机器上下载了依赖新版本libseccomp2的Docker包结果目标机器是Ubuntu 20.04基础库版本偏旧安装时就报依赖不满足。后面我会在常见问题部分专门讲这个坑。2.2 排除历史安装的干扰因素如果目标机器上曾经装过Docker或者containerd安装前必须先把旧痕迹清理掉否则轻则冲突报错重则服务起不来。用下面几条命令检查一下dpkg -l | grep -i -E docker|containerd systemctl list-unit-files | grep -i docker如果发现有残留的docker或containerd服务需要先停掉再卸载具体卸载操作可以看本文第6节的内容。另外还有一个容易被忽略的点检查/var/lib/docker目录是否存在。如果以前装过Docker又没删干净这个目录里会残留旧的数据卷和网络配置新装完的Docker启动时读取到脏数据有一定概率直接启动失败。最稳妥的办法就是把旧数据目录也备份或清掉再装新的。2.3 提前理清Docker CE的依赖关系Docker CE的依赖在官方文档里有明确说明但从实际安装的角度离线场景下你主要需要关注这么几类deb包首先是核心组件包包括docker-ce主程序、docker-ce-cli命令行工具、containerd.io容器运行时。从某个版本开始还多出了docker-buildx-plugin和docker-compose-plugin分别对应docker buildx和docker compose子命令。其次是系统基础依赖。这部分在标准Ubuntu安装里大部分已经有了比如libc6、libsystemd0、iptables、libseccomp2、libnfnetlink0等。但要注意版本号是否满足要求尤其是libseccomp2老版本Ubuntu上经常因为它的版本太旧导致Docker启动报错。最后是可选但有价值的镜像扫描组件docker-scan-plugin如果没有特殊需求可以不下省一个包的传输量。理清依赖的最直接方法是在联网机器上先执行apt-cache depends docker-ce查看完整的依赖树。不过这个命令在离线机器上没法用所以更实用的做法是联网机器上把Docker源的配置做好之后直接按第3节的方法把Docker主包和依赖包一次性下载下来。提示依赖包下载得越全离线安装时越不容易中途卡壳。宁可多下几个用不上的包也别缺关键的依赖包。3. 在联网机器上准备安装包三种方法我都实测过3.1 先把Docker官方软件源配置好无论你是用下面哪种具体方法下载安装包第一步都是在联网的Ubuntu机器上把Docker的官方软件源配好。虽然下载deb包不一定要通过源但配好源之后你可以用apt-cache madison查看所有可安装版本也能用apt download精确拿包非常方便。在联网机器上执行sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt-get update这里要注意一点下载deb包用的联网机器系统版本最好和离线目标机器一致。比如目标机器是Ubuntu 22.04你就找一台同样22.04的机器来准备安装包这样依赖版本的兼容性是最稳妥的。如果实在找不到同版本机器那就优先保证Docker核心包的版本匹配基础依赖包单独在对应版本的系统上下载。3.2 方法一用apt download精确下载指定版本这种方法适合你已经明确要装哪个Docker小版本号的场景。先查看软件源里有哪些版本可选apt-cache madison docker-ce输出结果会列出可用版本类似docker-ce | 5:24.0.7-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages docker-ce | 5:24.0.6-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages记下你想装的版本号然后建一个目录把核心包都下载进去mkdir -p ~/docker-offline-deb cd ~/docker-offline-deb apt download docker-ce5:24.0.7-1~ubuntu.22.04~jammy \ docker-ce-cli5:24.0.7-1~ubuntu.22.04~jammy \ containerd.io \ docker-buildx-plugin \ docker-compose-plugin这种方式的优点是版本控制非常精确生产环境需要保持多台机器Docker版本一致时特别好用。缺点是你得自己保证依赖包完整如果装的时候发现有缺失还得再回到联网机器上补下。3.3 方法二用download-only全量捕获依赖如果你不想手工一个个分析依赖推荐用这个方式。它通过apt自己的依赖解析把安装docker-ce时需要的所有deb包全部下载到本地缓存目录。sudo apt-get install -y --download-only docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin执行完这条命令后apt会把所有需要的deb包放到/var/cache/apt/archives/目录下。我们把这些包拷到自己的工作目录里mkdir -p ~/docker-offline-deb cp /var/cache/apt/archives/*.deb ~/docker-offline-deb/用这种方式你基本不用担心漏掉某个基础依赖因为apt已经把整棵依赖树都展开并拉下来了。实测下来最终的deb文件数量和总大小都会比只下载核心组件要多一些但在U盘和网络传输都不是瓶颈的前提下多花这一点存储换来的省心非常值得。我目前最常用的就是这种方法。3.4 方法三结合apt-cache depends手动补齐有少数情况上面两种方式都不好用比如你需要下载某个特定版本的基础依赖包但apt源里该版本的包已经被更新覆盖了。这时候就需要手动分析依赖并下载。先查看docker-ce的完整依赖关系apt-cache depends docker-ce输出结果会列出Depends字段的内容比如libc6、libseccomp2、iptables等。看到哪些包后可以逐个下载apt download libseccomp2 apt download iptables这种方法比较麻烦主要用在“目标机器缺少某个基础依赖且版本有严格要求”的补包场景。正常装Docker的话用前两种方法足够了这里不再展开。3.5 核对安装包清单确认文件完整下载完成后一定要进入目录看一下文件名和数量ls -lh ~/docker-offline-deb/正常情况下目录里应该能看到类似这样的文件docker-ce_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb、docker-ce-cli_..._amd64.deb、containerd.io_..._amd64.deb、docker-buildx-plugin_..._amd64.deb、docker-compose-plugin_..._amd64.deb再加上一批系统依赖包。确认文件不是0字节也没有缺胳膊少腿之后把这整个文件夹拷到目标离线机器上即可。传输方式根据你的环境来U盘、内网共享目录、scp都可以。我之前用的是内网scpscp -r ~/docker-offline-deb/ 目标机IP:/home/ubuntu/4. 离线机器上的安装全流程4.1 安装命令的正确打开方式安装包已经拷到离线机器上了现在进入正式安装环节。安装时我优先推荐用apt安装本地deb文件而不是直接用dpkgcd ~/docker-offline-deb sudo apt-get install -y ./*.deb为什么推荐apt而不是dpkg因为apt会自动处理目录内deb包之间的依赖关系。比如docker-ce依赖containerd.io如果同一目录下已经存在containerd.io的deb包apt会按依赖关系自动先安装它不需要你手动排序。而直接用dpkg -i *.deb的话如果打包顺序不对很容易遇到“未安装的软件包”报错虽然可以用sudo apt-get -f install修复但离线环境下这个命令可能因为找不到软件源而失效所以不如一开始就用apt。我第一次装的时候偷懒用了dpkg -i *.deb果不其然报了一堆依赖错误。后来重新用apt-get install -y ./*.deb一条命令就搞定了。这个经验值得记下来。4.2 安装后的服务启动与开机自启安装完成后先重新加载systemd配置然后启动Docker服务sudo systemctl daemon-reload sudo systemctl start docker sudo systemctl enable dockerstart是启动服务enable是设置成开机自启。如果enable这一步忘了做机器重启后Docker不会自己起来内网机器又往往没有现场操作条件到时候只能远程登录手动启动很麻烦。启动完之后可以看一下服务状态sudo systemctl status docker正常状态会显示Active: active (running)如果显示failed先别慌跳到第7节排查启动失败的问题。4.3 验证安装成果服务起来了还得验证一下Docker是不是真的能正常工作。先看基础信息sudo docker info sudo docker versiondocker info能显示Docker daemon的运行信息包括容器数量、镜像数量、存储驱动等。docker version能分别显示Client和Server的版本号。如果Server部分没有报错说明daemon已经正常跑起来了。再进一步用Hello World镜像验证整个容器运行链路是否通畅。但线上机器没有外网环境直接docker run hello-world会拉镜像失败。所以离线环境下我更推荐用一个简单方法验证直接创建一个容器来执行echo命令不需要拉取任何外部镜像sudo docker run --rm busybox echo docker ok等等这其实也要从远程仓库拉busybox镜像离线环境仍然不行。真正的离线验证方式是用本地已有的镜像或者用Docker自带的基础网络验证sudo docker network ls sudo docker ps这两条命令如果都能正常执行并返回结果说明daemon的核心功能、网络栈、和CLI通信都没有问题。如果你提前准备了其他离线镜像tar包可以用docker load xxx.tar导入后再运行验证。4.4 离线环境下怎样准备业务镜像安装好了Docker之后你还需要把你的业务镜像导入到离线机器上。在联网机器上先把镜像保存成tar文件docker save -o myapp.tar myapp:latest然后把tar文件传到离线机器上再用docker load导入sudo docker load -i myapp.tar如果你需要导入的是compose项目里用到的多个镜像可以分别save再分别load或者在联网机器上写个简单循环一次搞定。这个流程和Docker的离线安装是配套的一并提出来供你参考。5. 装完Docker后建议马上做的三件事5.1 配置镜像仓库加速地址离线机器本身无法直接访问外网仓库拉镜像但如果你后续会让这台机器偶尔联网或者准备从内网的镜像仓库拉取镜像建议在/etc/docker/daemon.json里预先配置好镜像加速地址sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://你的加速器地址] } EOF sudo systemctl daemon-reload sudo systemctl restart docker这个步骤并不是必须的但对于使用公共镜像服务有一定速度需求的用户来说提前配置好能少很多麻烦。你可以根据实际网络环境在这个文件里同时加上registry-mirrors数组里的多个地址Docker会依次尝试。修改完daemon.json后一定要重启Docker否则配置不会生效。另外还要注意daemon.json如果配置了不合法的加速地址Docker启动时会直接报错所以粘贴地址的时候要仔细核对。5.2 让当前用户免sudo执行docker命令每次执行docker命令都要加sudo时间久了真的很烦。把当前登录用户加入docker组就可以省掉这一步sudo usermod -aG docker $USER newgrp dockernewgrp docker是让当前会话立即生效不用退出重新登录。这条命令的含义是把当前用户附加到docker用户组由于Docker的socket文件默认允许docker组访问所以加入后就能免sudo执行docker命令了。如果你管理的是生产环境建议谨慎操作给需要的人加就行不要为了省事把所有用户都塞进docker组毕竟能操作Docker相当于能操作宿主机上的特权容器。5.3 高频运维命令速查装完Docker之后难免要日常维护这里列几条高频命令供参考systemctl status docker # 查看Docker服务状态 journalctl -u docker --since 5 min ago # 查看最近5分钟Docker日志 docker ps -a # 查看所有容器含已停止 docker images # 查看本地镜像列表 docker exec -it 容器名 bash # 进入容器内部交互 docker logs -f 容器名 # 实时查看容器日志 docker system df # 查看磁盘占用情况第2条查日志的命令在启动失败和高负载排查时非常有用。日志里会直接告诉你daemon启动过程中卡在了哪一步比盲猜稳定得多。6. 卸载方法不想用了也要卸得干干净净6.1 停止运行中的容器与服务卸载的第一步不是删包而是先把所有依赖Docker运行的东西停掉。如果机器上还有正在运行的容器直接卸载会造成数据不一致而且容器进程还占着资源。先看有没有正在运行的容器docker ps如果有业务容器先停掉。是compose启动的项目最好到项目目录下执行docker compose down这样会把compose创建的容器、网络一并清理掉。然后停止Docker服务本身sudo systemctl stop docker sudo systemctl stop docker.socket这里一定要连着docker.socket一起停。新版Docker的systemd配置里有一个docker.socket单元它负责监听Docker API的socket连接如果你只停了docker服务而没停socket有些操作会通过socket重新把Docker服务拉起来造成“明明停了又自己起来了”的诡异现象。6.2 卸载Docker软件包接着卸载通过apt或dpkg安装的Docker相关组件sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-scan-plugin如果当初是通过apt-get install -y ./*.deb安装的用purge卸载是最干净的它会同时删除软件包和配置文件。如果你还装过其他Docker插件包可以在上面的命令后面追加包名。假如执行时提示某些包未安装那可能是个别组件当初没装可以忽略也可以根据dpkg的提示逐个调整包名。总之这一条命令的目的是把所有Docker二进制文件和systemd服务脚本从系统里移除。6.3 清理镜像、容器和数据目录purge命令会删掉Docker程序但不会动你的业务数据。Docker默认把镜像层、容器文件系统、数据卷都放在/var/lib/docker目录下containerd的数据在/var/lib/containerd。要想彻底卸载、释放磁盘空间这两个目录必须手动删除sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -rf /etc/docker执行前请务必确认自己的真实意图。/var/lib/docker里面如果还有你辛苦构建的本地镜像或数据库容器的数据卷删了就真的找不回来了。在公司生产环境做这个操作之前记得先和业务方确认数据备份情况。另外还要清理安装时添加的apt源和密钥文件sudo rm -f /etc/apt/sources.list.d/docker.list sudo rm -f /etc/apt/keyrings/docker.gpg不清理的话机器下次联网时apt update可能会因为源里部分包不可用而报错虽然不影响其他功能但看着烦。清理掉之后整个系统就和没装过Docker一样干净了。6.4 验证卸载结果卸载完最后做一遍检查确保没有残留which docker docker version dpkg -l | grep -i docker systemctl list-unit-files | grep dockerwhich docker和docker version应该报“找不到命令”dpkg和systemd的查询结果应该为空。如果还有残留条目根据刚才的思路该删的目录再删一遍该purge的包名再执行一次purge。我在一次清理测试环境时因为忘了删/var/lib/containerd结果重装新版Docker后总出现网络命名空间冲突的问题后来排查了半天才发现是旧containerd数据还在作怪。所以这一步真的不要省略。7. 常见问题速查与避坑记录7.1 dpkg提示“依赖关系不满足”这是离线安装时最常遇到的错误。典型报错是dpkg: dependency problems prevent configuration of docker-ce docker-ce depends on containerd.io ( 1.6.0); however: Package containerd.io is not installed.遇到这种情况第一步先用dpkg -l查看目标机器的包安装情况确认到底缺哪个依赖。第二步到联网机器上把缺失的依赖deb包下载好传过来再用apt-get install -y /path/to/缺失包.deb安装。如果同时缺好几个依赖包可以用apt-get install -y /path/*.deb一次性处理。7.2 Docker服务启动失败状态为failed启动失败的场景多种多样但日志信息最有说服力。执行sudo journalctl -u docker --since 3 min ago -e常见的启动失败原因包括iptables v1.8.7 (nf_tables): Could not fetch some rules这通常和内核的nftables/iptables兼容性相关需要检查内核版本和iptables版本failed to start daemon: error initializing graphdriver: operation not permitted这种情况多半是存储驱动和内核特性不匹配需要检查内核是否支持overlayCannot connect to the Docker daemon at unix:///var/run/docker.sock这是服务没起来而不是Docker有问题。排查启动失败的核心思路就是先看日志日志里会把daemon初始化的每一阶段都写出来卡在哪一步一目了然。7.3 containerd被独立安装过导致冲突有些机器上可能因为其他中间件或我之前提到的旧实验独立安装过containerd.io包。新装Docker CE时如果这个老包的版本比Docker要求的更高或更低可能出现版本冲突。处理方式也很直接先卸载旧containerdsudo apt-get purge -y containerd.io然后重新执行安装流程让Docker包自带的新containerd覆盖安装。如果系统里还残留了/var/lib/containerd的数据卸载后一并清掉再重装基本上就能解决。7.4 docker命令提示权限不足执行docker命令时如果看到Got permission denied while trying to connect to the Docker daemon socket说明你的当前用户不在docker组里。解决办法就是第5.2节说的sudo usermod -aG docker $USER newgrp docker加入docker组后如果再试还是不行查看一下socket文件权限是否被改过ls -l /var/run/docker.sock正常情况下它属于root用户docker组权限是srw-rw----。如果权限被改乱需要重启Docker服务让它重新创建socket文件。7.5 常见问题速查表问题现象可能原因解决办法dpkg依赖错误缺少containerd或系统依赖补齐依赖deb包后重新安装服务启动failediptables/cgroup/存储驱动不兼容查journalctl日志定位后处理无法连接docker.sock服务未启动systemctl start docker并查日志permission denied用户不在docker组执行usermod -aG docker内核版本过低内核不支持所需特性升级内核后重试镜像加载慢或无网络离线环境拉镜像失败用docker load导入离线镜像tar我在实际项目里最常遇到的是前两个。虽然在联网环境看来都是小问题但在离线状态下每多一次往返查找缺失包都会很耗时所以还是那句话准备阶段把依赖理顺后面能省一大半力气。我个人在实际操作中的体会是离线安装Docker这个任务真正考验的不是命令背得多熟而是能不能把依赖树搞清楚、把坑提前避开。用.deb包方式的好处就是整个流程有清晰的路径可走按部就班来基本都能成功。如果你在Ubuntu里用的是二进制tar包或老版本安装方式这次也不妨试试把它切到.deb包体系来管理升级、卸载、维护都会顺手很多。最后再分享一个小技巧把docker-offline-deb这个文件夹重命名成带版本号的名字比如docker-offline-deb-24.0.7同时在机器上留存一份版本清单txt文件。这样做最大的好处是过几个月回看的时候你一眼就能知道哪台机器该用哪一堆安装包不用再对着解密文件名发呆了。
RELATED

相关推荐

大模型幻觉评估实战:忠实性、事实性及IAG框架解析

大模型幻觉评估实战:忠实性、事实性及IAG框架解析

1. 项目背景:为什么现在要死磕大模型幻觉评估过去一年多,我一直在做大模型应用的评测和落地。坦白说,模型能力迭代的速度远超预期,但有一个问题始终绕不开,就是幻觉。无论你用的是开源模型还是闭源API,无论…

📅 2026/9/30 8:21:55
大模型幻觉评估:忠实性与事实性的分野与落地实践

大模型幻觉评估:忠实性与事实性的分野与落地实践

做RAG项目落地的时候,我被客户一份测试报告问住了:模型回答和检索回来的资料“大体对得上”,但一追问细节就露馅——要么引用了原文里根本没有的统计数字,要么把两个不同来源的数据混在一起说,要么干脆自己编了一个听起…

📅 2026/9/30 8:21:55
谢希仁《计算机网络》第五版课后题实战推演指南

谢希仁《计算机网络》第五版课后题实战推演指南

简介:本资源是《计算机网络》(谢希仁第五版)配套课后习题的完整参考答案,专为高校计算机、通信、电子信息等专业学生及考研备考者设计,旨在帮助读者系统梳理核心概念、厘清易混淆知识点、强化对分组交换原理、网络分类…

📅 2026/9/30 8:21:55
MORE NEWS

更多资讯

📰

计算机网络学习路线:从TCP/IP协议栈到期末、408与面试通关

1. 为什么人人都该啃一遍计算机网络 1.1 这门课到底在讲什么 到了大二大三,计算机类学生基本都会撞上这门课。热搜上常年挂着一堆"计算机网络期末复习""计算机网络题库""计算机网络第八版答案",说明它确实是挂科率、痛苦…

📰

基于AutoDL与Xshell/Xftp的Qwen2.5-7B云GPU部署实战指南

去年做了一次大模型部署,选的是AutoDL云GPU Xshell远程终端 Xftp文件传输这套组合,把Qwen2.5-7B完整跑通。整个过程没有想象中那么复杂,但坑确实不少:SSH连不上、模型下载卡住、显存不够、Xftp传输慢、关机后环境丢失……每一个…

📰

YOLO垃圾分类系统实战:模型演进与边缘部署全指南

做智慧环保项目踩过的第一个坑,往往不是模型精度不够,而是“什么垃圾”“放在哪个位置”“用哪种方式识别”这些业务问题没有被定义清楚。我去年全程参与了一套YOLO垃圾分类系统的搭建,从模型选型、数据标注、训练调优,到最终在边…

📰

非阻塞IO与IO多路复用:五种IO模型全解析与实战应用

聊到网络编程,IO模型永远是绕不开的基本功。很多同事干了几年业务代码,一问五种IO模型还是只能背出名字,但真正到了定位高并发问题、调优服务时,往往卡在“非阻塞IO”和“IO多路复用”这对组合上。这篇我就把这些概念放到一个业务…

📰

2026找新媒体IP陪跑前要搞懂的几个问题

最近不管是后台留言咨询**新手做自媒体要不要找 IP 陪跑**的新人博主,还是纠结**传统企业数字化转型找 IP 陪跑还是自建团队**的制造业负责人,不少人都遇到投入资金但收效不达预期、服务内容和前期口头承诺不一致的情况。想要选到适配自身的服务商&#…

📰

JS数据结构容器选型指南:数组、Map、Set与队列的复杂度陷阱与实战

1. 为什么刷算法题要先聊容器 我刷 LeetCode 和各类面试题时,见过太多 JS 选手把数组当成万能容器。遇到数据先 push 进数组,要查重就 indexOf,要当队列用就 shift,结果到了中等难度的题直接超时或者代码写得极其别扭。其实标题里…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬