Apache Mesos Containerizer 内部机制:容器创建、启动流程、Launcher 与状态机解析
云原生集群管理容器编排任务调度【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/meso/mesos点击查看免费下载本文基于 Apache Mesos 官方文档docs/containerizer-internals.md展开深入解析 Mesos Agent 中 Containerizer 的创建与启动机制--containerizers标志如何决定容器器类型、Composing/Docker/Mesos 三类容器器的实现差异、Linux Launcher 如何用 freezer cgroup 与管道冻结子进程、以及各容器器的状态机。读完本文你将从 Agent 源码层面理解一个任务从launch到RUNNING的完整调用链并能据此排查容器启动失败、隔离器异常等问题。1. Containerizer 的角色与抽象 APIContainerizer容器器是 Mesos 中负责启动容器的组件。它拥有为 task/executor 启动的容器并负责其隔离isolation、资源管理resource management和事件如统计信息 statistics。从源码看所有容器器都继承自抽象基类 Containerizer其定义在mesos::internal::slave命名空间中核心虚函数包括方法作用recover(state)从 Agent 状态恢复所有容器化 executor系统上存在但不在 state 中的容器会被终止清理launch(containerId, containerConfig, environment, pidCheckpointPath)按ContainerConfig启动容器若ContainerID带 parent则尝试启动嵌套容器attach(containerId)建立 HTTP 连接以向容器流式输入/输出mesos-cat、mesos-tail等工具依赖它update(containerId, resourceRequests)动态更新容器资源usage(containerId)获取容器资源用量统计ResourceStatisticsstatus(containerId)获取 isolator 相关属性的运行时状态ContainerStatuswait(containerId)等待容器终止返回ContainerTerminationdestroy(containerId)销毁正在启动/运行的容器杀死全部进程并释放资源kill(containerId, signal)向运行中容器发送信号containers()/remove(containerId)/pruneImages(...)枚举容器、移除嵌套容器、清理无用镜像launch()的返回值为枚举LaunchResultSUCCESS、ALREADY_LAUNCHED、NOT_SUPPORTED——正是NOT_SUPPORTED让 Composing 容器器得以逐个尝试多个容器器见第 3 节。2. Containerizer 的创建--containerizers标志Agent 根据--containerizers标志创建容器器。若指定了多个容器器如docker,mesos则使用Composing 容器器将它们组合成一个逻辑容器器。2.1 标志定义在 src/slave/flags.cpp 中该标志的定义为add(Flags::containerizers, containerizers, Comma-separated list of containerizer implementations\n to compose in order to provide containerization.\n Available options are mesos and docker (on Linux).\n The order the containerizers are specified is the order\n they are tried.\n, mesos);要点逗号分隔、可选值为mesos与dockerLinux、书写顺序即尝试顺序、默认值为mesos。2.2Containerizer::create()的解析逻辑Containerizer::create() 是工厂入口其流程为用strings::split(flags.containerizers, ,)切分标志若发现重复条目直接报错Duplicate entries found in --containerizer flag在 Linux 上按需创建 Nvidia 组件若列表中含docker则无条件创建若只用mesos则还需--isolation中含gpu/nvidiaisolator见 containerizer.cpp#L239-L284遍历各类型mesos调用MesosContainerizer::create(...)docker调用DockerContainerizer::create(...)未知类型返回Unknown or unsupported containerizer若只创建出一个容器器直接返回它否则用ComposingContainerizer::create(containerizers)包装containerizer.cpp#L325-L336。这与文档描述完全一致--containerizersmesos时 Agent 直接持有MesosContainerizer实例--containerizersdocker,mesos时则持有 Composing 容器器。2.3 默认 executor 的补全当TaskInfo中没有指定 executor即纯命令任务时Agent 会为任务使用默认 executor——具体是mesos-executorMesos 容器器还是mesos-docker-executorDocker 容器器取决于当前使用的容器器。源码中对应的二进制名常量定义在 src/slave/constants.hppconstexpr char MESOS_DEFAULT_EXECUTOR[] mesos-default-executor;而 Docker 容器器侧则使用 MESOS_DOCKER_EXECUTORmesos-docker-executor。默认 executor 的资源开销很小默认值为 0.1 CPU、32MB 内存DEFAULT_EXECUTOR_CPUS、DEFAULT_EXECUTOR_MEM。3. Composing Containerizer组合模式的逐个尝试Composing 容器器将--containerizers指定的多个容器器组合成一个逻辑容器器组合模式 / composite design pattern自身不启动任何容器而是按顺序把launch委托给成员容器器。其核心逻辑在 ComposingContainerizerProcess::_launch这是一个递归延续函数containerizer迭代器记录当前尝试到哪一个当前容器器返回SUCCESS将内部状态从LAUNCHING置为LAUNCHED并挂接wait()回调待容器终止后从containers_表中移除记录返回非SUCCESS即不支持该任务containerizer移到下一个容器器继续尝试所有容器器都尝试完仍不支持返回NOT_SUPPORTED若期间有 destroy 正在进行直接返回Failure(Container was destroyed while launching)。每个容器由内部Container结构state 负责它的containerizer指针追踪状态只有LAUNCHING/LAUNCHED/DESTROYING三种composing.cpp#L126-L141。这种设计的意义在于配置--containerizersdocker,mesos的集群里Docker 任务走 Docker 容器器、普通任务自动落到 Mesos 容器器对用户完全透明。4. Docker Containerizer镜像、hook 与两种运行形态4.1 触发条件与启动步骤Docker 容器器使用 docker 包提供的 Docker 引擎来管理容器启动流程为仅当ContainerInfo::type为DOCKER时才启动源码中在 docker.cpp#L1153 检查containerConfig.container_info().type() ! ContainerInfo::DOCKER并返回NOT_SUPPORTED——这正是 Composing 容器器逐个尝试能生效的基础先拉取pull镜像DockerContainerizerProcess::pull() 调用docker-pull(...)并以metrics.image_pull计时调用 pre-launch hookAgent 的 HookManager 机制以两种方式之一启动 executor方式 AMesos Agent 运行在 Docker 容器内由 Agent 标志--docker_mesos_image是否存在来标识该值是启动 Mesos Agent 所用的 Docker 镜像任务带自定义 executor该 executor 在 Docker 容器中启动任务不带 executor只有 command默认 executormesos-docker-executor在 Docker 容器中启动并通过 Docker CLI 执行该命令。方式 BMesos Agent 不运行在 Docker 容器内任务带自定义 executor该 executor 在 Docker 容器中启动任务只有 commandAgentfork 一个子进程运行默认 executormesos-docker-executor后者再 spawn 一个 shell 通过 Docker CLI 执行命令。--docker_mesos_image的存在性检查在源码 docker.cpp#L328、L1271、L1398 等处反复出现其语义与 flags.cpp#L996-L1002 中的描述一致指定后容器器认为 Agent 跑在 Docker 中并用 Docker 容器启动 executor 以便 Agent 重启恢复时能 recover 它们。4.2 相关配置标志标志默认值说明--dockerdockerdocker 可执行文件的绝对路径--docker_mesos_image无Agent 所用的 Docker 镜像指定即进入方式 A--docker_socket/var/run/docker.sockUnix 默认资源名Docker daemon 的 socketWindows 上须为命名管道如//./pipe/docker_engine--docker_kill_orphanstrue允许容器器清理孤儿容器同一台宿主机跑多个 Agent 时应设为false避免互相清理--docker_remove_delay—Agent 判定容器 TERMINATED 后、执行docker rm前的等待时间如3days--docker_config无默认 Docker 配置文件绝对路径或 JSON 字符串用于私有镜像仓库认证这些标志的完整定义见 src/slave/flags.cpp#L973-L1028。Docker 容器器的完整行为另见 Docker 容器器文档。5. Mesos Containerizerprepare → fork → isolate → fetch → execMesos 容器器是原生容器器负责处理所有未指定ContainerInfo::DockerInfo的 executor/task。其启动五步流程在 MesosContainerizerProcess 中逐一实现并且每一步都对应一次状态迁移PREPARING ──► ISOLATING ──► FETCHING ──► RUNNING └──────────────┴───────────┴─────────► DESTROYING状态枚举的字符串化实现见 mesos/containerizer.cpp#L3490-L3499。5.1 第一步PREPARING——按顺序 prepare 各 isolatorlaunch()先将ContainerConfig检查点checkpoint落盘然后transition(containerId, PREPARING)并按 isolator 的注册顺序串行链接各 isolator 的prepare()mesos/containerizer.cpp#L1612-L1640// We prepare the isolators sequentially according to their ordering // to permit basic dependency specification, e.g., preparing a // filesystem isolator before other isolators. foreach (const OwnedIsolator isolator, isolators) { f f.then(... return isolator-prepare(containerId, containerConfig) ...); }注释点明了串行化的原因允许基本的依赖表达例如让 filesystem isolator 先于其他 isolator 准备。每个prepare()可返回OptionContainerLaunchInfo这些 launch info 会在后续合并成最终的ContainerLaunchInfo命令、工作目录、namespaces、环境变量等若多个 isolator 冲突地指定同一字段会直接失败。5.2 第二步fork executor子进程被冻结prepare 完成后容器器调用 Launcherfork 出 executor 子进程。源码中 launcher-fork() 的 argv 为mesos-containerizer launchMesosContainerizerLaunch::NAMElaunch flags 出于敏感考虑通过MESOS_CONTAINERIZER_前缀的环境变量传递而非命令行以免被宿主机上无权限用户通过ps看到。fork 时同时传入一对 pipepipes[0]/pipes[1]子进程被冻结、在隔离完成前不会继续执行——这正是文档所说 The forked child is blocked from executing until it is been isolated。子进程侧的阻塞点在 launch.cpp#L755-L769// Do a blocking read on the pipe until the parent signals us to continue. while ((length os::read(pipe[0], dummy, sizeof(dummy))) -1 errno EINTR) { continue; }--pipe_read/--pipe_write两个标志的定义见 launch.cpp#L118-L132其帮助文本明确写道Its used to synchronize with the parent process.5.3 第三步ISOLATING——并行调用各 isolator 的 isolate进入ISOLATING状态后isolate() 对每个 isolator 调用isolate(containerId, _pid)传入 fork 出的 pid并并行执行后用collect(futures)等待全部完成// Isolate the executor with each isolator. // NOTE: This is done is parallel and is not sequenced like prepare // or destroy because we assume there are no dependencies in isolation.与 prepare 的刻意串行相反isolate 被假设为无依赖因此并行以缩短启动时延。同时还会为每个 isolator 挂接watch()回调以捕获资源限制事件limited。5.4 第四步FETCHING——获取 executorfetch() 调用 Agent 的 Fetcher 按CommandInfo中的 URIs 下载 executor 到 sandbox 目录若配置了 hook还会触发HookManager::slavePostFetchHook(containerId, directory)。5.5 第五步exec——放行子进程并进入 RUNNINGexec()中父进程向 pipe 写端写入一个字符解冻的子进程恢复执行先运行 isolator 通过ContainerLaunchInfo下发的准备命令如 cgroups 挂载点调整等再exec到真正的 executor 二进制容器器随后transition(containerId, RUNNING)mesos/containerizer.cpp#L2388。5.6 Isolator容器器的插件层Isolator 负责为容器创建CPU、网络、存储、内存等资源相互隔离的环境。其虚函数 API 定义在 MesosIsolatorProcesssupportsNesting()、supportsStandalone()、recover()、prepare()、isolate()、watch()、update()、usage()、status()、cleanup()。各 isolator 的实现分布在 src/slave/containerizer/mesos/isolators/ 下的cgroups/、cgroups2/、namespaces/、network/、filesystem/、gpu/、linux/、posix/、xfs/等目录中具体行为与--isolation标志的用法见 Mesos 容器器文档。6. Launcherfork 与销毁容器的执行者Launcher 负责fork/销毁容器。抽象职责在容器化上下文中 fork 新进程子进程最终会 exec 给定路径的二进制并携带给定的 argv、flags 和环境子进程的 I/O 按指定 I/O 描述符重定向。6.1 Linux LauncherLinux launcher 是 Mesos 在 Linux 上的默认实现src/slave/containerizer/mesos/linux_launcher.cpp 中的关键步骤与文档描述一一对应为容器创建 freezer cgroup构造时调用cgroups::prepare(..., freezer, ...)取得 freezer 层级linux_launcher.cpp#L151-L209并校验该层级未挂载其他 cgroup 子系统创建 posix pipe用于宿主父进程与容器进程之间的通信用clone系统调用 spawn 子进程fork 路径上先ns::clone(*parentPid, enterFlags, child, cloneFlags)进入指定 namespace 后再 clone否则直接os::clone(child, cloneFlags)且cloneFlags | SIGCHLDlinux_launcher.cpp#L588-L661将新容器进程移入 freezer 层级Create the freezer cgroup, and add the child to the cgroup父进程向 pipe 写端写一个字符子进程完成阻塞读取后继续exec。freezer cgroup 的意义在于父进程随时可以通过冻结该 cgroup来暂停整个容器进程树例如资源更新、销毁前快照销毁时则按 freezer 中的 pid 集合整体杀掉容器。6.2 嵌套容器与 Linux namespaces自 Mesos 1.1.0 起支持嵌套容器。Linux Launcher 负责为嵌套容器 fork 子进程并按需克隆相应的 Linux namespaces。官方文档给出的顶层容器 vs 嵌套容器 namespace 支持对照表如下Linux Namespaces顶层容器Top Level Container嵌套容器Nested ContainerMountNot sharedNot sharedPIDConfigurableConfigurableNetwork UTSConfigurableShared w/ parentIPCNot shared - configurable (TBD)Not shared - configurable (TBD)CgroupShared w/ agent - Not shared (TBD)Shared w/ parent - Not shared (TBD)User (not supported)Shared w/ agentShared w/ parent术语说明原文档 Note对顶层容器shared表示容器与 Agent 共享该 namespace对嵌套容器shared表示嵌套容器与其父容器共享该 namespace。从源码结构看嵌套容器 fork 前会特殊处理进入父容器 mount namespace_enterNamespaces 含 CLONE_NEWNS 时 通过namespace_mnt_target标志让 launch 辅助进程先进入父容器的 mount namespace保证能访问到要启动的二进制然后再按 clone flags 创建新 namespace。6.3 Posix launcher文档标注 Posix launcher 为 TBD预留的无 cgroup 依赖实现方向。当前仓库中非 Linux 平台实际走SubprocessLauncher一类基于普通子进程的 Launcher其enterNamespaces/cloneNamespaces参数会被忽略见 mesos/containerizer.cpp#L2227-L2230 的注释。7. 容器器状态机对比文档最后给出两种容器器的状态集合两者均以RUNNING为核心、以DESTROYING收尾区别在于前置阶段状态Docker 容器器Mesos 容器器PREPARING—✔ISOLATING—✔PULLING✔—FETCHING✔✔RUNNING✔✔DESTROYING✔✔源码印证Docker 容器器PULLING在 docker.cpp#L443container-state Container::PULLING;置位destroy()会针对FETCHING/PULLING/RUNNING三种状态分别处理终止 fetch、终止docker pull、或等待 status 落定后清理见 docker.cpp#L2422-L2505Mesos 容器器每次状态迁移都经过统一的transition(containerId, ...)并对前一状态做CHECK_EQ断言如 fetch() 中 CHECK_EQ(container-state, ISOLATING)保证状态机不可乱序destroy()入口还会拒绝重复销毁state DESTROYING时直接失败。Docker 容器器的PULLING对应拉取镜像阶段、FETCHING对应获取 URIs 阶段Mesos 容器器的PREPARING/ISOLATING则分别对应 isolator 准备与隔离两个阶段见第 5 节。8. 延伸阅读与源码索引主题路径本文依据的官方文档docs/containerizer-internals.md容器器抽象基类src/slave/containerizer/containerizer.hpp容器器工厂create()src/slave/containerizer/containerizer.cppComposing 容器器src/slave/containerizer/composing.cppDocker 容器器src/slave/containerizer/docker.cppMesos 容器器launch/isolate/fetch/execsrc/slave/containerizer/mesos/containerizer.cppLauncher 接口与 Linux 实现src/slave/containerizer/mesos/launcher.hpp、linux_launcher.cpplaunch 辅助进程pipe 同步、execsrc/slave/containerizer/mesos/launch.cppIsolator 插件 APIsrc/slave/containerizer/mesos/isolator.hppAgent 容器器相关标志src/slave/flags.cppDocker 容器器行为docs/docker-containerizer.mdMesos 容器器与 Isolatorsdocs/mesos-containerizer.md嵌套容器与 Task Groupdocs/nested-container-and-task-group.md小结Mesos 的 Containerizer 层用容器器 isolator 插件的两级抽象实现了资源隔离的可插拔化Composing 容器器让docker,mesos组合配置按序透明尝试Mesos 容器器则以PREPARING → ISOLATING → FETCHING → RUNNING的状态机组织启动流程配合 Linux Launcher 的 freezer cgroup pipe 冻结/解冻 机制实现了先隔离、后放行的原子化容器启动。排查容器启动问题时的实用路径是先看 Agent 日志中的状态迁移再对照本文第 5、6 节的调用链定位卡在 prepare、isolate、fetch 还是 exec 阶段。赞分享云原生集群管理容器编排任务调度【免费下载链接】mesosApache Mesos项目地址https://gitcode.com/gh_mirrors/meso/mesos点击查看免费下载相关推荐Apache Mesos 容器化器Containerizer内部机制全解析创建流程、Launcher 与状态机Apache Mesos 容器化器Containerizer内部机制全解析创建流程、Launcher 与状态机 导读 本文深入剖析 Apache Meso集群管理任务调度后端Apache Mesos Containerizer 内部机制解析组合、Docker 与 Mesos 原生容器化的完整架构Apache Mesos Containerizer 内部机制解析组合、Docker 与 Mesos 原生容器化的完整架构 导读本文以 Apache Mes云原生Apache Mesos 容器化器Containerizer完全指南Composing / Docker / Mesos 三种方案与隔离机制详解Apache Mesos 容器化器Containerizer完全指南Composing / Docker / Mesos 三种方案与隔离机制详解 Apac云原生集群管理容器编排任务调度上一篇NocoBase 插件客户端样式与主题开发指南createStyles、Theme Token 与主题编辑器实战下一篇Cortex 项目中的 zap 结构化日志实践设计哲学、采样机制与 FAQ 全解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

【Agent】【workflow】13.带重排序的RAG工作流 - LlamaIndex Workflow示例分析

【Agent】【workflow】13.带重排序的RAG工作流 - LlamaIndex Workflow示例分析

案例目标本案例展示了如何使用LlamaIndex Workflow构建一个带重排序功能的RAG(检索增强生成)系统。该系统通过工作流的方式组织RAG流程,包括文档索引、检索、重排序和响应合成四个主要步骤,实现了更精确、更高效的信息检索和生成。…

2026/10/14 21:02:40 阅读更多 →
agent-memory 召回路装配内收:CompositeStorage 工厂化装配 Recaller 的架构设计与循环依赖破解

agent-memory 召回路装配内收:CompositeStorage 工厂化装配 Recaller 的架构设计与循环依赖破解

人工智能AI AgentAgent 记忆RAGMCP 服务 【免费下载链接】agent-memory Memory 是一款面向 AI 智能体的长期记忆模块,为运行在 openJiuwen 框架上的智能体提供记忆提取、存储、检索与迁移能力。 项目地址: https://gitcode.com/openJiuwen/agent-memory …

2026/10/14 21:02:40 阅读更多 →
《县中的孩子》:看见县域教育生态的真实困境

《县中的孩子》:看见县域教育生态的真实困境

书读到一半的时候,我好几次停下来。不是看不懂,是有些场景太熟悉了。教室后墙的倒计时、县城中学门口等孩子的电动车、晚自习熄灯后还在走廊背书的影子——这些画面明明离大城市很遥远,却又让人觉得哪儿哪儿都是。《县中的孩子》不是那种告诉…

2026/10/14 21:02:40 阅读更多 →

最新新闻

局域网内WebUI接入OAuth2/OIDC企业SSO的完整实践指南

局域网内WebUI接入OAuth2/OIDC企业SSO的完整实践指南

刚开始做这件事的时候,我其实不太情愿。团队里那个本地 WebUI 是给内部大模型任务管理和参数调优用的,最初只是“谁要用谁自己问管理员要密码”,大家也这么用了大半年。直到公司网络合规审计点名了这个系统,要求所有内部 Web 服务…

2026/10/14 21:51:58 阅读更多 →
基于Tomcat 8与Java 7的WebSocket聊天室源码解析与部署实践

基于Tomcat 8与Java 7的WebSocket聊天室源码解析与部署实践

简介:这是一套基于Tomcat8、Java7与ExtJS构建的WebSocket实时聊天室完整源码,面向具备Java Web基础、希望掌握全双工通信开发的进阶学习者。项目以JSR 356标准API为核心,服务端通过ServerEndpoint端点处理连接、消息与关闭等生命周期事件&…

2026/10/14 21:51:58 阅读更多 →
双色散信道为何难处理?从信道建模到BEM与压缩感知的工程实践

双色散信道为何难处理?从信道建模到BEM与压缩感知的工程实践

通信系统设计里,多数工程师最先学会处理两类信道:频率选择性信道靠OFDM加上均衡来抗,时间选择性信道靠交织、导频估计再插值来抗。但如果遇到 double-dispersive channel,也就是双色散信道,这两套知识往往会同时失灵。…

2026/10/14 21:51:58 阅读更多 →
Hadoop单机版部署测试全流程:从环境准备到WordCount踩坑记录

Hadoop单机版部署测试全流程:从环境准备到WordCount踩坑记录

折腾了整整一下午,终于把 Hadoop 单机版部署测试完整跑通了。这事情说起来不复杂,但坑确实不少:环境变量、SSH 免密、格式化时机、进程死活、作业卡住……每一项都能让你怀疑人生。如果你现在也在准备从零部署一套 Hadoop,我的建议…

2026/10/14 21:51:58 阅读更多 →
概率DP与容错机制:状态设计、阈值截断与随机过程应用

概率DP与容错机制:状态设计、阈值截断与随机过程应用

刷题刷到P10504的时候,我第一反应是:一个“普及”的题,怎么标签里挂上了“期望”和“动态规划”?等沉下心把它完整啃下来才发现,这题之所以定为普及,并不是因为期望DP的概念有多深,而是题目把“…

2026/10/14 21:51:58 阅读更多 →
Java智能体开发实战:基于OpenClaw从零搭建售后工单Agent

Java智能体开发实战:基于OpenClaw从零搭建售后工单Agent

2026年一开工,我这边技术群里聊得最频繁的词就是“智能体”。不少Java开发的朋友都在问同一个问题:这几年AI的应用落地基本被Python生态包圆了,我们Java后端还有没有机会吃到这波红利?我的答案是:不仅有,而…

2026/10/14 21:50:56 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/14 7:53:34 阅读更多 →