鲲鹏916服务器Docker安装与Tomcat容器部署实战
1. 项目背景与整体思路拆解1.1 鲲鹏916平台到底特殊在哪先说结论鲲鹏916是一颗基于ARM v8架构的服务器处理器运行着openEuler的arm64版本系统时整机环境跟平时用的x86服务器有本质区别。最直观的差异就是指令集x86是amd64这台机器是aarch64也就是arm64。这个差异不是简单改个CPU型号就能糊弄过去的它直接决定了你能装哪些软件、能跑哪些镜像。很多第一次接触鲲鹏916的人会惯性思维把x86服务器上的那套安装脚本直接拿过来用。比如去官网下载一个docker-ce的repo文件或者找一个写着linux/amd64的二进制包结果装到一半要么提示找不到包要么装完启动直接报exec format error。这些坑我在实际测试里都踩过所以这篇文章不打算讲教科书式的理论而是把我在某项目组的鲲鹏916服务器上从零开始装Docker、再把Tomcat容器跑通的完整过程写下来。如果你手头正好有一台openEuler-arm64的机器可以直接照着操作。1.2 为什么选Docker加Tomcat这套组合项目需求是落地一个Java Web服务开发环境用的是Tomcat交付方式要求尽量标准化。在鲲鹏916上直接装JDK和Tomcat当然可行但问题在于每换一台机器就要重新配一遍环境依赖版本稍微不一致就出幺蛾子。用Docker可以把整个运行时环境打包成镜像到哪台机器上都是同一套配置省心很多。从镜像架构的角度看Tomcat官方镜像一直维护着multi-arch版本也就是同一个tomcat:9.0标签下面同时包含amd64、arm64v8、ppc64le等不同架构的镜像。Docker在拉取时会根据当前系统的uname -m自动选择对应架构所以理论上只要网络没问题docker pull tomcat:9.0就能直接拉到arm64版本。这也意味着“跑通Tomcat容器”这个目标在鲲鹏916上是一个完全可行、而且不算复杂的任务。1.3 整体操作路径规划整个安装过程我分成几步来做确认CPU架构和系统版本避免装错软件包。检查内核、cgroup、磁盘空间、网络等前置条件。安装Docker优先尝试系统自带的yum源不行就用静态二进制包。配置Docker运行参数启动守护进程并确认架构信息。拉取Tomcat镜像启动容器并验证访问。处理各种常见报错把容器固定成可重启的服务。这个顺序是我在实际操作中反复调整后定下来的。特别是环境摸底这一步很多人会跳过明明装不上Docker是因为内核模块或者cgroup版本问题非要在安装命令上折腾半天非常浪费时间。2. 环境摸底装Docker前必须搞清楚的几件事2.1 用lscpu确认芯片和架构拿到机器第一件事不是急着敲安装命令而是先看清楚这台机器到底是什么底子。我用的命令是lscpu uname -m cat /etc/os-releaselscpu输出里Architecture字段会显示aarch64Model name会带出鲲鹏处理器的型号信息比如Kunpeng 916这类标识。uname -m最简单直接如果输出是aarch64那后面的所有下载、安装参数都要按arm64来选。如果这里输出的是x86_64说明你压根不是在鲲鹏裸金属上操作可能是虚拟机没开对CPU模式后面所有步骤都不作数。系统版本看/etc/os-release重点确认是不是openEuler的arm64版本。openEuler的版本号会直接显示比如20.03 LTS、22.03 LTS。不同大版本的内核和软件源有差异后续安装Docker的方案也会跟着变。2.2 内核版本和cgroup版本检查Docker对内核有硬性要求一般3.10以上就行鲲鹏916上跑的openEuler内核版本通常是4.19或者5.10起步所以内核这部分基本不用担心。真正容易出问题的是cgroup版本。检查命令uname -r stat -fc %T /sys/fs/cgroup/如果输出的是cgroup2fs说明系统用的是cgroup v2如果输出的是tmpfs说明是cgroup v1。openEuler 20.03默认还是v1但从22.03开始部分版本已经把systemd切到了cgroup v2。Docker对cgroup v2的支持是从20.10版本才真正稳定下来的如果你系统是v2又装了个18.09的Docker启动容器十有八九会报cgroups: cannot find cgroup mount destination这类错误。要么升级Docker版本要么在内核启动参数里关掉v2改回v1。两条路我在后面都会给详细操作。2.3 磁盘空间、防火墙和网络连通性Docker根目录默认是/var/lib/docker镜像和容器都堆在这里。Tomcat基础镜像是几百MB加JDK和运行日志起步至少要预留10GB以上空余。检查磁盘用df -h /var/lib/docker如果挂载分区空间不足建议提前把Docker的数据目录换到大分区这个在/etc/docker/daemon.json里配置>systemctl status firewalld firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload如果是内网测试环境很多人会直接关防火墙图省事但我还是建议按端口放行规避安全风险。网络连通性也要提前试一下因为不管是用yum源安装还是拉取Docker镜像都依赖网络。可以执行curl -I https://repo.openeuler.org curl -I https://registry-1.docker.io如果第一个能通、第二个超时说明外网受限后面就需要配置镜像加速器或者走内网镜像仓库。3. Docker安装全过程从yum源到systemd守护进程3.1 优先尝试openEuler自带的yum源openEuler的官方软件仓库里维护了Docker相关软件包不同小版本里包名不太一样有的叫docker有的叫docker-engine。我的建议是先用yum看一下yum makecache yum list available | grep -i docker如果列表里有docker-engine或者docker直接装yum install -y docker-engine这种方式最省事所有依赖和启动脚本都由发行版维护好安装后直接systemctl start docker即可。装完可以执行docker version确认版本如果显示的是18.09或者更老的版本而前面检测到系统cgroup是v2那我建议不要在这里死磕下面看静态二进制包方案直接装个新版本。3.2 没有yum包时的静态二进制安装方案在我实际测试的那台机器上openEuler的源里没有现成的Docker包所以我选择了更通用的静态二进制包安装。这个方案的特点是Docker官方针对aarch64架构提供了编译好的压缩包里面包含dockerd、docker、containerd、runc等全部组件放到系统路径就能用不依赖发行版仓库。下载命令wget https://download.docker.com/linux/static/stable/aarch64/docker-20.10.17.tgz tar -xzf docker-20.10.17.tgz cp docker/* /usr/bin/注意这里的aarch64路径一定不能写错如果把arm64写成amd64下载下来的二进制在鲲鹏上根本无法执行。解压之后还需要配置systemd服务因为静态包默认不带启动脚本。我自己写了一个简化版的unit文件放在/etc/systemd/system/docker.service[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID LimitNOFILE1048576 LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity Restartalways RestartSec2 TimeoutStartSec0 [Install] WantedBymulti-user.target接着再写socket激活文件/etc/systemd/system/docker.socket[Unit] DescriptionDocker Socket for the API [Socket] ListenStream/var/run/docker.sock SocketMode0660 SocketUserroot SocketGrouproot [Install] WantedBysockets.target然后执行systemctl daemon-reload systemctl enable --now docker用docker ps验证一下如果能看到输出且没有报错说明守护进程已经起来了。3.3 daemon.json配置与镜像加速/etc/docker/daemon.json是Docker守护进程的核心配置我在这台鲲鹏机器上至少要做三件事配置镜像加速、指定数据目录、设置日志上限。{ data-root: /var/lib/docker, registry-mirrors: [https://your-mirror-accelerator.example.com], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, exec-opts: [native.cgroupdrivercgroupfs] }registry-mirrors的地址需要换成你实际可用的加速器云厂商的控制台里一般都会有内网地址内网环境下拉镜像是真的快。exec-opts这行是cgroup驱动的兜底配置如果Docker和systemd的cgroup类型不一致加这一行能减少很多docker stop超时之类的怪问题。改完配置后重启Dockersystemctl restart docker docker info在docker info的输出里注意看Architecture是不是aarch64Cgroup Driver是cgroupfs还是systemd以及Docker Root Dir是否指向你预期的数据目录。看到这些信息都没问题Docker安装这一步才算真正落地。4. 跑通Tomcat容器拉镜像、起容器、访问验证4.1 拉取arm64架构的Tomcat镜像现在终于到了最让人期待的部分。Docker守护进程跑起来之后直接在命令行拉取Tomcat镜像docker pull tomcat:9.0因为前面已经确认了机器架构是aarch64Docker会去镜像仓库拉取linux/arm64版本而不是amd64版本。这一点可以主动验证一下docker image inspect tomcat:9.0 --format {{.Architecture}}看到输出是arm64就对了。如果你用的某个镜像仓库不支持multi-arch或者拉下来之后跑不了可以用强制指定平台的方式docker pull --platform linux/arm64 tomcat:9.0但这种方法要求仓库里确实存在arm64的镜像否则会拉取失败。官方Tomcat镜像没问题很多第三方只构建了amd64的镜像就会卡在这里后面常见问题里我会详细说。4.2 启动Tomcat容器并完成端口映射启动容器的命令如下docker run -d \ --name demo-tomcat \ --restartalways \ -p 8080:8080 \ -e TZAsia/Shanghai \ -e JAVA_OPTS-Xms256m -Xmx512m \ tomcat:9.0这里几个参数都值得展开说一下。-d表示后台运行--name demo-tomcat给容器一个固定名字后面查阅日志、进入容器都靠它--restartalways让容器跟着Docker守护进程自动重启服务器重启后不需要手动拉起-p 8080:8080把宿主机8080端口映射到容器内8080这是Tomcat默认监听端口TZAsia/Shanghai解决容器时区问题否则容器内日志时间和宿主机差8个小时JAVA_OPTS则是给JVM指定初始堆和最大堆内存根据实际业务负载调整。启动后查看状态docker ps docker logs -f demo-tomcat正常情况下日志里会出现类似org.apache.catalina.startup.Catalina.start Server startup in [xxx] milliseconds的行说明Tomcat已经启动成功。4.3 用curl验证访问和部署应用在同一台机器上先做本地验证curl -I http://127.0.0.1:8080返回HTTP/1.1 200就说明容器内的Tomcat正常响应了。如果看不到先检查docker ps里容器状态是不是Up再看日志有没有异常堆栈。Tomcat跑通之后接下来就是把业务应用放进去。我习惯用两种方式一种是临时测试时用docker cp直接拷贝war包docker cp app.war demo-tomcat:/usr/local/tomcat/webapps/Tomcat会自动热部署等几秒访问http://服务器IP:8080/app/就能看到应用页面。如果是正式交付我更推荐用挂在宿主机目录的方式这样升级war包不需要重新创建容器docker run -d \ --name demo-tomcat \ -p 8080:8080 \ -v /data/webapps:/usr/local/tomcat/webapps \ tomcat:9.0把新的war包丢到/data/webapps下面Tomcat会自动加载新版本。容器的可迁移性和环境一致性在这个场景里体现得非常明显无论宿主机是鲲鹏916还是别的arm64平台只要镜像不变运行结果就是一致的。5. 常见问题与排查技巧实录5.1 exec format error最常见的架构翻车现场这个报错的完整提示一般是standard_init_linux.go:xxx: exec user process caused: exec format error现象是容器创建了但立刻退出日志里只有这一句话。原因几乎可以断定镜像不是arm64架构。最常见的情况是开发者在x86机器上做了一个镜像直接传到鲲鹏服务器上跑而镜像里的程序是amd64的二进制ARM处理器根本没有这个指令集自然无法执行。解决方法是回到镜像构建源头用docker build --platform linux/arm64重新构建或者换用官方支持multi-arch的镜像。另外也可以用docker manifest inspect查看远程镜像支持哪些平台我习惯在拉取前先查一下docker manifest inspect tomcat:9.0输出里能看到architecture字段提前知道支持情况比拉下来跑挂了再排查效率高得多。5.2 docker.service启动失败或找不到服务静态安装后经常会遇到Failed to start docker.service: Unit docker.service not found.这就是没有生成systemd unit文件导致的。回到/etc/systemd/system目录把前面3.2节里我给出的docker.service和docker.socket内容复制过去然后执行systemctl daemon-reload systemctl enable --now docker就能解决。另外还有一种情况是dockerd二进制权限不对或者GLIBC版本不兼容这时先检查一下/usr/bin/dockerd --version如果提示找不到动态库那就是系统基础库和静态包版本不匹配这种情况下建议优先用openEuler的yum源安装发行版适配的Docker。5.3 拉镜像卡死或超时在直接连Docker Hub的场景下docker pull卡在Waiting或者直接超时非常常见。解决办法优先级如下配置镜像加速器改/etc/docker/daemon.json的registry-mirrors字段。使用内网自建的镜像仓库把image前面加上仓库地址比如registry.internal.example.com/library/tomcat:9.0。拉取小镜像测试连通性比如docker pull hello-world。这里有个坑镜像加速器对已经存在的镜像层不会加速所以如果之前pull到一半失败了再次pull还会卡在相同的位置。我一般会先docker rmi删掉残留的none镜像再重新pull。5.4 cgroup v1和v2导致的启动异常openEuler 22.03环境下如果装了老版本Docker容器启动可能会报cgroup相关错误。我给的终极大招是直接改内核启动参数回退到cgroup v1。编辑/etc/default/grub在GRUB_CMDLINE_LINUX中加入systemd.unified_cgroup_hierarchy0然后重新生成grub配置并重启grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg reboot不过这个方法比较重如果只是测试环境我更推荐直接升级Docker到20.10以上版本新版本对cgroup v2支持完善不需要动内核参数。5.5 容器端口访问不通容器起来了docker ps也显示0.0.0.0:8080-8080/tcp但外部就是访问不了。排查顺序是ss -lntp | grep 8080 systemctl status firewalld iptables -L -n | grep 8080如果宿主机端口没监听去看看dockerd是否突然挂了如果监听正常但外部不通大概率是防火墙拦着按2.3节放行端口。5.6 常见问题速查表现象可能原因解决动作exec format error镜像架构不是arm64换multi-arch镜像或用--platform linux/arm64重新构建Unit not found静态安装没有systemd配置补全docker.service和docker.socket拉镜像超时外网不通或加速器失效配置可用加速器或改用内网镜像仓库cgroup报错Docker版本与cgroup版本不匹配升级Docker到20.10或回退内核到cgroup v1外部访问不了8080防火墙拦截firewall-cmd --add-port8080/tcp容器内时区不对没有设置TZ启动时加-e TZAsia/Shanghai6. 实战总结与扩展建议6.1 我把这套方案固化成了脚本环境反复装了几次之后我把安装过程整理成了一个脚本省得每次都要手动敲命令。脚本核心逻辑如下yum install -y curl tar wget https://download.docker.com/linux/static/stable/aarch64/docker-20.10.17.tgz tar -xzf docker-20.10.17.tgz cp docker/* /usr/bin/ mkdir -p /etc/docker cat /etc/docker/daemon.json EOF { data-root: /var/lib/docker, log-driver: json-file, log-opts: {max-size: 100m, max-file: 3} } EOF脚本里没有写死镜像加速地址因为不同内外网环境的可用地址差别太大我建议在安装时单独交互输入。另外脚本需要以root身份执行如果服务器有sudo权限管理最好先确认当前用户的权限范围。6.2 跑通Tomcat之后还能做什么Tomcat容器跑通只是第一步后面可以做的事情其实很多。比如把多个容器用Docker Compose编排同时起Tomcat、Nginx、Redis一套命令全部启动。或者把容器迁移到别的鲲鹏服务器只需要docker save导出镜像再到目标机器docker load导入整个应用环境就搬过去了。如果项目规模继续扩大还可以考虑引入容器集群管理平台让多个节点组成资源池。但这一步的前提是Docker基础要稳镜像构建规范要统一。我在项目组里推行的是所有应用镜像用multi-arch构建构建机上打一次标签到x86和arm64服务器上都能跑版本管理也简单很多。6.3 个人经过这次实践后的几点体会第一次在鲲鹏916上装Docker最大的感受是ARM服务器生态已经没有想象中那么荒凉官方镜像、主流中间件基本都有arm64版本尤其是Tomcat这类Java生态的应用迁移成本很低。真正需要小心的反而是那些内部构建多年、只针对x86编译的老软件包。我的建议是拿到任何一台鲲鹏服务器先不要急着灌软件花十分钟把架构、系统版本、cgroup、磁盘这些底细摸清楚后面能省几个小时。装Docker时优先走发行版仓库和静态二进制包这两条路不要随便在网上找第三方的rpm包安全性和兼容性都没法保证。Tomcat镜像选官方版本虽然大了点但省心。最后容器跑通后立刻加上--restartalways和时区参数这些小细节在后续长时间运行里会省去很多麻烦。

相关新闻

Linux网络驱动设备方法解析:从snull虚拟网卡看net_device_ops实现

Linux网络驱动设备方法解析:从snull虚拟网卡看net_device_ops实现

如果你研究过 Linux 网络驱动,大概率见过 snull 这个教学示例。它用软件模拟了一对虚拟网卡 snull0 和 snull1,让你在没有物理设备的情况下,也能完整体验网络设备驱动的注册、发送、接收和卸载流程。这套示例最值得学习的部分,正是…

2026/10/13 18:11:56 阅读更多 →
信源编码与信道编码全解析:从哈夫曼到极化码的工程选型指南

信源编码与信道编码全解析:从哈夫曼到极化码的工程选型指南

我这些年被问过最多的问题之一就是:信息论里那些编码到底怎么分?信源编码、信道编码、哈夫曼、LDPC、极化码……名字一堆,关系又绕,很多人学到后面直接记串了。其实把编码这条线捋清楚之后会发现,它的逻辑非常顺&#…

2026/10/13 18:11:56 阅读更多 →
别墅装修施工团队管理核心:系统化管控与工程细节实践指南

别墅装修施工团队管理核心:系统化管控与工程细节实践指南

我在这个海滨城市做别墅装修施工团队已经十几年了,经手的项目从独栋到联排,从轻奢到新中式,踩过不少坑,也攒下很多可复用的经验。这篇内容不是给业主讲装修工艺教科书,而是以一个施工团队负责人的视角,聊聊…

2026/10/13 18:11:56 阅读更多 →

最新新闻

Cursor额度重置教程:设备指纹清理实现合规续杯

Cursor额度重置教程:设备指纹清理实现合规续杯

简介:本资源是面向软件开发者的 Cursor 编辑器 11 月续杯实战源码包,聚焦解决免费用户模型调用受限、账号续期繁琐等实际痛点,适用于中初级开发者快速提升 AI 编程效率。压缩包共 3 个文件,含 .inscode(Cursor 插件配置…

2026/10/13 19:38:20 阅读更多 →
用Claude Code摸清老项目技术栈:三轮提示词框架与实战记录

用Claude Code摸清老项目技术栈:三轮提示词框架与实战记录

“只管去写”系列到了第二天。今天的任务很明确:用Claude分析一个老项目的技术栈。这件事听起来远没有写一个新功能那么有成就感,但只要你接过大半年之前自己写的代码、接过离职同事留下的半成品项目、或者刚入职需要快速搞清一套业务系统的底细&#xf…

2026/10/13 19:38:20 阅读更多 →
开源协作的隐形基石:高效代码评审实践指南

开源协作的隐形基石:高效代码评审实践指南

做开源项目这几年,我越来越确信一件事:代码评审(code review)是整个协作链条里最被低估的一环。很多人觉得代码写完、测试跑通、合并进去就完事了,可真正把一个项目推过几个版本之后才发现,评审才是让代码质…

2026/10/13 19:38:20 阅读更多 →
Python pickle序列化实战:从协议版本到安全红线全解析

Python pickle序列化实战:从协议版本到安全红线全解析

如果你写过 Python,一定遇到过这类需求:程序跑完把内存里的字典、列表或者某个自定义类实例保存到磁盘,下次启动再原封不动读回来。Python 为此内置了一个序列化模块叫 pickle,标题说得很直白——Pickle 是 Python 内置的序列化模…

2026/10/13 19:38:20 阅读更多 →
AnyPS5:不越狱的PS5增强方案与边界协同架构

AnyPS5:不越狱的PS5增强方案与边界协同架构

项目标题:“AnyPS5”这个名称本身带有强烈的指向性与模糊性并存的特征——它既像一个技术代号,又像一句口号;既暗示兼容性、泛用性(“Any”),又锚定在特定硬件生态(“PS5”)。但问题…

2026/10/13 19:38:20 阅读更多 →
互联网大厂薪酬结构全解析:总包、级别、绩效与谈薪技巧

互联网大厂薪酬结构全解析:总包、级别、绩效与谈薪技巧

1. 先说结论:今年这个薪酬盘子到底什么情况每年这个节点,总有人拿着某头部互联网平台的薪酬截图或者 Offer 在各个群里问“这个数正常吗”。说实话,我在这一行摸爬滚打了十几年,带过团队、做过招聘、也背过绩效,今年这…

2026/10/13 19:37:19 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →