Docker CMD 执行模式全解析:exec 形式为何更受 Kubernetes 青睐?

第一章:Docker CMD 的 shell 与 exec 模式概述

在 Docker 容器的启动过程中,CMD 指令用于指定容器运行时默认执行的命令。该指令支持两种不同的执行模式:shell 模式和 exec 模式。这两种模式在进程管理、信号传递以及环境变量处理方面存在显著差异。

Shell 模式

当使用 shell 模式时,命令会通过 /bin/sh -c 来执行。这意味着启动的进程并不是直接由容器的主进程(PID 1)运行,而是由 shell 子进程托管。这种模式下,环境变量可以被正常解析,但接收到的系统信号(如 SIGTERM)可能不会正确传递给实际应用进程。
# 使用 shell 模式的 CMD 示例
CMD echo "Hello from container"
上述写法等价于:/bin/sh -c 'echo "Hello from container"'。

Exec 模式

exec 模式使用 JSON 数组语法显式指定命令及其参数,命令将作为容器内的主进程直接执行,不经过 shell 解析。这种方式能确保信号被正确传递,适合长期运行的服务。
# 使用 exec 模式的 CMD 示例
CMD ["echo", "Hello from container"]
此方式直接执行 echo 命令,避免了 shell 中间层,提升控制精度。

两种模式对比

特性Shell 模式Exec 模式
语法形式字符串JSON 数组
是否解析环境变量是否(除非使用 entrypoint 脚本)
信号传递可能中断完整支持
主进程身份shell 进程应用进程
合理选择模式对容器行为至关重要。对于需要良好信号处理的生产服务,推荐使用 exec 模式。

第二章:Shell 模式的运行机制与实践

2.1 Shell 模式的工作原理与进程模型

Shell 是用户与操作系统内核之间的接口,其核心功能是解析命令并启动相应进程。当用户输入命令时,Shell 首先进行词法分析和语法解析,随后通过 fork() 系统调用创建子进程,并在子进程中执行 exec() 系列函数加载目标程序。
进程创建与执行流程
典型的命令执行过程如下:

#include <unistd.h>
#include <sys/wait.h>

pid_t pid = fork();  // 创建子进程
if (pid == 0) {
    execlp("ls", "ls", "-l", NULL);  // 子进程加载新程序
} else {
    wait(NULL);  // 父进程等待子进程结束
}
上述代码展示了 Shell 执行外部命令的基本机制:fork() 复制当前进程,子进程调用 execlp() 替换其地址空间为新程序,实现命令执行。
进程状态与资源管理
Shell 维护作业控制信息,包括前台/后台进程组、信号处理等。每个进程拥有独立的 PID 和环境变量,通过系统调用与内核交互。

2.2 使用 shell 模式启动应用的典型场景

在微服务架构中,shell 模式常用于快速调试与临时任务执行。通过操作系统命令行直接调用应用入口,可绕过常规部署流程,实现高效干预。
自动化脚本集成
运维脚本常通过 shell 命令批量启动服务实例,便于统一配置环境变量与日志路径:
#!/bin/bash
export APP_ENV=production
nohup java -jar /opt/app/service.jar --server.port=8081 > /var/log/app.log 2>&1 &
上述脚本设置运行环境,后台启动 Java 应用并重定向输出,适用于集群节点批量部署。
容器化调试场景
Docker 容器内服务异常时,可通过 docker exec -it sh 进入实例,手动执行启动命令验证配置:
  • 检查依赖服务连通性
  • 测试 JVM 参数有效性
  • 验证配置文件加载路径

2.3 环境变量在 shell 模式下的解析行为

在 shell 执行环境中,环境变量的解析遵循特定的词法和语法优先级规则。当 shell 读取命令行时,会首先进行变量展开(variable expansion),将 $VAR 或 ${VAR} 替换为对应值。
变量展开顺序
shell 按以下顺序处理变量:
  1. 参数扩展(如 $HOME)
  2. 命令替换(如 $(pwd))
  3. 算术扩展(如 $((2+3)))
示例:环境变量解析过程
export NAME="Alice"
echo "Hello, $NAME"
上述代码中,$NAME 在执行时被替换为 "Alice"。若未使用引号包裹,shell 可能进一步进行分词处理,影响输出结果。
特殊字符与引号的影响
双引号允许变量展开,而单引号则抑制解析:
echo "$HOME"  # 输出路径,如 /home/user
echo '$HOME'  # 字面输出 $HOME
此机制确保开发者可精确控制变量是否应被解析。

2.4 shell 模式下信号传递的局限性分析

在 shell 环境中,信号是进程间通信的重要机制,但其传递存在固有局限。
信号丢失与竞态条件
shell 脚本通常以解释方式执行,无法精确捕获快速连续的信号。当多个 SIGINT 或 SIGTERM 连续到达时,可能仅被处理一次。
# 信号处理示例
trap 'echo "Caught SIGTERM"; exit' TERM
while true; do
    sleep 1
done
上述脚本注册了 TERM 信号处理器,但在高频率信号冲击下,Linux 可能合并信号,导致行为不可预测。
子进程信号继承问题
使用 & 启动的后台进程会继承父 shell 的信号处理设置,但默认忽略多数信号,造成控制失效。
信号类型shell 行为局限性
SIGINT中断当前命令无法中断阻塞系统调用
SIGSTOP不可捕获无法通过 trap 处理

2.5 实践:构建基于 shell 模式的容器镜像

在轻量级容器化场景中,基于 shell 脚本构建镜像是快速实现服务封装的有效手段。该方式适用于调试工具、初始化脚本或简单守护进程。
基础镜像选择
优先选用精简的发行版镜像,如 Alpine Linux,以降低体积和攻击面:
FROM alpine:latest
COPY script.sh /usr/local/bin/
CMD ["/usr/local/bin/script.sh"]
上述 Dockerfile 将 shell 脚本复制到镜像中,并设置为启动命令。注意确保脚本具备可执行权限(chmod +x script.sh)。
脚本健壮性设计
为提升可靠性,脚本应包含错误处理与日志输出:
#!/bin/sh
set -e  # 遇错立即退出
echo "Starting service..."
exec "$@"
使用 set -e 确保异常时容器终止,便于 Kubernetes 等平台触发重启策略。

第三章:Exec 模式的特性与优势

3.1 Exec 模式如何直接启动主进程

在容器化环境中,Exec 模式通过替换默认的 shell 启动方式,直接执行指定的主进程。该模式避免了额外的进程封装,提升启动效率与资源利用率。
核心机制解析
Exec 模式利用操作系统级的 execve() 系统调用,将当前进程的地址空间替换为目标程序。这意味着容器 PID 1 进程即为主应用进程,而非中间 shell。
// 示例:Go 中模拟 exec 调用
package main

import (
    "os"
    "syscall"
)

func main() {
    binary, err := exec.LookPath("myapp")
    if err != nil {
        panic(err)
    }
    // 直接替换当前进程镜像
    err = syscall.Exec(binary, []string{"myapp"}, os.Environ())
}
上述代码通过 syscall.Exec 替换进程映像,实现零代际的主进程启动。参数说明: - binary:目标可执行文件路径; - 第二个参数为命令行参数列表; - 第三个参数继承原有环境变量。
优势对比
  • 减少进程层级,避免僵尸进程问题
  • 信号可直接传递至主进程,增强生命周期管理
  • 启动延迟更低,适用于高性能场景

3.2 exec 模式中的 PID 1 与信号处理机制

在容器环境中,使用 `exec` 模式启动的进程会直接作为 PID 1 运行,承担初始化进程的职责。这不仅意味着它需要正确处理僵尸子进程,还必须响应系统信号(如 SIGTERM、SIGINT),否则会导致服务无法优雅终止。
信号转发的重要性
当容器接收到停止指令时,Docker 会向 PID 1 发送 SIGTERM。若该进程未实现信号捕获与转发,应用可能无法及时释放资源。
#!/bin/sh
trap 'kill -TERM $child' TERM
/my-app &
child=$!
wait $child
上述脚本通过 `trap` 捕获 SIGTERM,并转发给实际应用进程。`wait $child` 确保主进程不退出,从而维持信号监听能力。
PID 1 的特殊行为
Linux 内核对 PID 1 有特殊保护机制,忽略未注册的信号处理器。因此,静态链接的二进制程序(如 Go 应用)若未内置信号处理逻辑,需借助轻量初始化进程(如 tini)保障可靠性。

3.3 实践:使用 exec 模式优化容器生命周期管理

在容器化应用中,正确配置启动命令对生命周期管理至关重要。使用 exec 模式启动进程可确保应用直接作为 PID 1 运行,从而正确接收系统信号(如 SIGTERM),实现优雅关闭。
exec 模式的 Dockerfile 示例
CMD ["./start.sh"]
该写法采用 exec 模式执行脚本,避免了 shell 模式下多余的 shell 进程封装,使应用进程能直接响应外部信号。
与 shell 模式的对比
  • shell 模式:CMD ./start.sh 会启动 /bin/sh -c 包裹进程,导致信号处理异常
  • exec 模式:CMD ["./start.sh"] 直接执行,进程 ID 为 1,支持信号透传
通过 exec 模式,容器内主进程可正确处理终止信号,显著提升服务的可靠性和运维可控性。

第四章:Kubernetes 环境下的模式选择策略

4.1 Kubernetes 对容器入口点的调用机制

Kubernetes 在 Pod 启动时通过 kubelet 调用容器运行时接口(CRI)来启动容器,并依据镜像定义或 Pod 配置中的 `command` 和 `args` 字段决定入口点行为。
入口点与参数的映射关系
当容器镜像在 Dockerfile 中定义了 `ENTRYPOINT`,Kubernetes 会将其映射为 Pod 的 `command` 字段;`CMD` 则对应 `args`。若 Pod 显式指定二者,则覆盖镜像默认值。
  1. command 定义容器启动命令(等价于 ENTRYPOINT)
  2. args 提供命令参数(补充或覆盖 CMD)
spec:
  containers:
  - name: my-container
    image: nginx
    command: ["/bin/sh", "-c"]
    args: ["echo 'Hello from entrypoint'; sleep 3600"]
上述配置中,容器以 `/bin/sh -c` 为入口点,执行后续脚本。kubelet 将该命令传递给容器运行时(如 containerd),由其调用 runc 创建进程。整个过程受 CRI 标准约束,确保跨运行时一致性。

4.2 exec 模式为何更适配 Pod 生命周期管理

在 Kubernetes 中,exec 模式通过直接调用容器内已存在的进程环境执行命令,避免了额外的初始化开销,与 Pod 的生命周期高度契合。
生命周期钩子集成
Pod 的 lifecycle 钩子可在容器启动或终止时执行特定命令,exec 模式天然支持此类场景:
lifecycle:
  postStart:
    exec:
      command: ["/bin/sh", "-c", "echo Starting > /tmp/health"]
该配置在容器启动后立即写入状态文件,利用容器自身 shell 环境完成初始化,无需依赖外部探针。
资源效率对比
  • exec 模式复用容器 PID 命名空间,不创建新进程隔离层
  • 相比 attach 或 run 模式,减少 30% 以上的上下文切换开销
  • 适用于健康检查、配置热加载等高频轻量操作

4.3 跨环境部署时的兼容性考量

在将应用从开发环境迁移至测试、预发布或生产环境时,系统架构、依赖版本和配置策略的差异可能导致运行异常。确保跨环境一致性是保障服务稳定的关键。
依赖版本统一管理
使用锁文件(如 package-lock.json、go.sum)固定依赖版本,避免因 minor 或 patch 版本差异引发不兼容问题。
require (
    github.com/gin-gonic/gin v1.9.1
    golang.org/x/crypto v0.14.0
)
// go.mod 中明确指定依赖版本,提升可重现性
该配置确保所有环境中拉取相同的模块版本,防止“在我机器上能跑”的问题。
配置与环境解耦
通过环境变量注入配置,而非硬编码:
  • 数据库连接地址
  • 日志级别
  • 第三方服务密钥
环境数据库主机日志级别
开发localhost:5432debug
生产db-prod.cluster-xxx.rds.amazonaws.comerror

4.4 实践:在 K8s 中验证不同 CMD 模式的终止行为

在 Kubernetes 中,容器的终止行为受 Dockerfile 中 CMD 指令形式的影响。使用 shell 形式(如 CMD ./start.sh)会启动一个 shell 子进程,信号可能无法正确传递给主进程,导致优雅终止失败。而 exec 形式(如 CMD ["./start.sh"])直接执行可执行文件,保证进程接收 SIGTERM 信号。
实验对比表格
CMD 形式进程 PID是否接收 SIGTERM
shell 形式1(shell),应用为子进程否
exec 形式1(应用自身)是
验证示例
FROM alpine
COPY shutdown-demo.sh /
RUN chmod +x /shutdown-demo.sh
CMD ["/shutdown-demo.sh"]  # 推荐:exec 形式,PID 1 可接收信号
该写法确保脚本作为 PID 1 进程运行,K8s 发送 SIGTERM 时能触发脚本内的 trap 处理逻辑,实现 30 秒内优雅退出。

第五章:总结与最佳实践建议

监控与告警机制的建立
在生产环境中,系统稳定性依赖于完善的监控体系。推荐使用 Prometheus 采集指标,并结合 Grafana 可视化关键性能数据。
  • 定期采集服务响应时间、CPU 与内存使用率
  • 设置基于阈值的告警规则,例如连续 5 分钟 CPU 使用超过 80%
  • 将告警推送至企业微信或 Slack 等协作平台
配置管理的最佳方式
避免硬编码配置,使用环境变量或集中式配置中心(如 Consul 或 Nacos)进行管理。
// 示例:Go 中通过环境变量读取数据库连接
dbHost := os.Getenv("DB_HOST")
if dbHost == "" {
    dbHost = "localhost" // 默认值仅用于开发
}
db, err := sql.Open("mysql", fmt.Sprintf("%s:3306...", dbHost))
自动化部署流程
采用 CI/CD 流水线可显著降低人为操作风险。以下为典型部署阶段:
阶段操作工具示例
代码构建编译应用并生成镜像GitHub Actions, Jenkins
测试执行运行单元与集成测试Go Test, JUnit
部署上线推送到预发或生产环境Kubernetes, Ansible
安全加固建议
所有外部接口应启用 HTTPS,并强制使用 TLS 1.3。敏感信息如密钥不得提交至代码仓库,应通过 KMS 服务动态获取。
2024 电商订单明细数据集(24列,382287条记录)CSV 详情介绍:该数据集为 2024 年电商订单明细,可以关联电商用户画像数据集(16列, 98673条记录)CSV,覆盖食品生鲜 / 3C 电子 / 美妆护肤 / 家居日用 / 服装鞋帽 5 大类、15 个品牌,平均客单价 1717 元、支付宝 + 微信支付占 75%、88% 订单无促销、取消率 5%,适合做 RFM 用户分层、购物篮关联分析、销售预测和促销效果评估。 立即下载

相关推荐

Picture of ssh key

Picture of ssh key

Dockerfile中CMD的exec模式为何更安全?3个真实故障案例告诉你真相

掌握Docker CMD shell 与 exec模式差异,避免常见容器故障。通过3个真实案例解析exec模式在信号处理、进程管理上的优势,提升容器安全性与稳定性,值得收藏。

LogicNest的博客 744

政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈?.docx

政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈?

docker exec执行多个命令详解

docker exec命令能够在运行着的容器中执行命令。docker exec命令的使用格式:docker exec [OPTIONS] container_name COMMAND [ARG...]OPTIONS说明:-d,以后台方式执行命令;-e,设置环境变量-i,交互模式-t,设置TTY-u,用户名或UID,例如myuser:myusergroup通常COMMAND只能是一条语句,为了支持多...

成长的足迹 5万+

政府科技管理者如何提升区域科技成果转化项目的评价与筛选效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员在成果转化过程中如何快速提升技术推介效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Dockerfile中的ENTRYPOINT和CMD指令详解与比较

Dockerfile中的ENTRYPOINT指令和CMD指令都可以设置容器启动时要执行的命令,但用途是有略微不同的。 ENTRYPOINT指令和CMD指令虽然是在Dockerfile中定义,但是在构建镜像的时候并不会被执行,只有在执行docker run命令启动容器时才会起作用。 在Dockerfile中,只能有一个ENTRYPOINT指令,如果有多个ENTRYPOINT指令则以最后一个为准。...

成长的足迹 4万+

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文档系统性地介绍了基于Simulink平台的两相交错并联Boost电路仿真模型,属于电力电子变换器建模与仿真研究的重要组成部分。该模型采用交错并联结构,有效提升了系统效率、降低了输出电流纹波,并具备优良的动态响应与系统稳定性。文档不仅聚焦于该特定拓扑的开环与闭环控制实现,还整合了丰富的配套资源,涵盖多种主流DC-DC变换器(如Buck、Boost、LLC、CLLC)、功率因数校正(PFC)电路、PWM整流器、双向充放电系统以及新能源应用场景(如V2G、微电网)等领域的仿真模型。资源体系强调软开关技术、多相交错控制、系统级建模与参数优化设计,所有内容均提供可运行的Simulink仿真文件,部分包含详细的设计报告、计算书及参考文献,具有较强的工程实践与科研复现价值。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的硕士博士研究生、高校科研人员,以及从事新能源发电、电动汽车、电源系统设计等领域的工程技术人员。; 使用场景及目标:①支撑高校电力电子与电力系统方向的科研项目,用于新型拓扑结构的建模与先进控制算法的验证;②服务于本科生与研究生的毕业设计、课程设计及高水平学术论文的仿真复现;③为企业在电源产品研发、新能源系统集成等环节提供成熟的仿真方案参考,缩短研发周期,降低试错成本。; 阅读建议:建议使用者首先访问文档末尾提供的完整资源目录链接,按需下载对应仿真模型;在实践过程中,应重点关注模型的参数配置、控制策略实现细节与仿真工况设置,结合配套的说明文档深入理解其工作原理与设计思路,推荐在MATLAB/Simulink环境中动手调试与二次开发,以充分掌握电力电子系统的核心技术。

Dockerfile Exec格式与Shell格式的ENTRYPOINT与CMD

编写Dockerfile时,Exec格式时ENTRYPOINT与CMD Exec格式时,ENTRYPOINT可以通过CMD提供额外参数,CMD的额外参数可以在容器启动时动态替换。 [root@server1 docker]# vim Dockerfile 文件编辑内容如下: FROM busybox ENTRYPOINT ["/bin/echo", "hello"] CMD ["world"] 编写Dockerfile时,Shell格式时ENTRYPOINT与CMD 在shell格式时ENTRYPO

zhaojikun521521的博客 573

基于单片机的电动工程机械高压管理单元控制器设计.docx

基于单片机的电动工程机械高压管理单元控制器设计.docx

IEC 101 仿真调试台是基于 Windows 桌面工具,用于 IEC 60870-5-101(简称 IEC 101 / 101 规约)串口远动通信的仿真、调试与报文分析

IEC 101 仿真调试台是基于 Windows 桌面工具,用于 IEC 60870-5-101(简称 IEC 101 / 101 规约)串口远动通信的仿真、调试与报文分析。同一个程序内既可充当主站(控制站),也可充当从站(被控站 / RTU),并内置 FT1.2 链路层原始帧的逐字段解析。 本软件是规约仿真与调试工具,不替代 SCADA/EMS 主站系统,也不作为生产环境长期运行的前置机。现场接入真实装置前,请确认串口电气接口(RS-232/RS-485)、电平转换与接线方式正确。

Docker容器化实战:10个核心知识点提升开发部署效率

容器化技术通过将应用及其依赖打包成标准化的镜像,实现了‘一次构建,处处运行’的核心价值。其底层原理基于操作系统级的虚拟化,通过命名空间和控制组实现资源隔离与限制,相比传统虚拟机更为轻量高效。这项技术解决了开发、测试、生产环境不一致的经典难题,显著提升了软件交付的可靠性和效率。在微服务架构、持续集成/持续部署(CI/CD)流程中,容器化已成为基础支撑技术。本文聚焦Docker这一主流容器引擎,深入剖析镜像构建优化、容器网络通信、数据持久化等关键实践,并结合多阶段构建、Docker Compose编排等热词,系

weixin_33816946的博客 350

科技中介服务机构如何实现技术经纪人的能力画像与绩效评估?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Dockerfile中Entrypoint和Cmd的exec和shell语法

简介 本文介绍了在Dockerfile的Entrypoint和Cmd命令中exec和shell语法的不同。 exec exec风格的语法(注意一定要是双引号!否则你会得到一些迷之错误): entrypoint ["/bin/bash"] cmd ["/bin/bash"] 当使用exec写法的时候,entrypoint和cmd中的命令会被这样执行: exec("/bin/bash“) 其中exec可以认为是Linux系统调用中的exec。 shell shell风格的语法: entrypoint /bi

Focus 3129

deepseek-harness-0.2.2-rc.1-win-x64.zip

deepseek-harness-0.2.2-rc.1-win-x64.zip

三电平Buck直流变换器双闭环、单闭环、开环仿真【附参考文献】(Simulink仿真实现)

内容概要:本文系统介绍了三电平Buck直流变换器在Simulink环境下的开环、单闭环及双闭环控制系统的建模仿真与性能对比分析,深入探讨了不同控制策略对系统动态响应、稳态精度、抗扰能力及鲁棒性的影响。通过构建完整的仿真模型,详细阐述了各控制结构的设计思路、关键模块实现方法及PI控制器参数整定过程,并结合仿真波形对比分析了三种控制方式在启动过程、负载突变等工况下的输出电压表现,充分验证了双闭环控制在抑制电压波动、提升调节速度和负载适应性方面的显著优势。文档还提供了详尽的参数设置指南和参考文献,便于读者复现结果并开展进一步研究。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的本科生、研究生,以及从事直流变换器设计、控制算法开发和系统仿真的科研人员与工程技术开发者。; 使用场景及目标:①掌握三电平Buck变换器的工作原理与数学建模方法;②理解电压模式控制与电流模式控制的差异与应用场景;③学习双闭环PI控制器的设计流程与参数整定技巧;④为电力电子装置的控制器设计、性能优化及科研项目提供仿真验证平台与技术参考。; 阅读建议:建议读者结合Simulink软件动手搭建仿真模型,分步实现开环、单闭环与双闭环控制系统,通过调整控制器参数并观察不同工况下的系统响应,深入理解控制策略对系统性能的影响机制,同时结合提供的参考文献强化理论基础,实现从仿真到实际应用的有效过渡。

Docker exec命令

作用:在运行的容器中执行命令 语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] OPTIONS说明: -d :分离模式: 在后台运行 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端 实例 例如我们在上篇文章中已经准备好了一个运行状态的容器,可以输入 docker exec -it 6d70b1d366bd /bin/...

简单随风的博客 4401

三层交换机第一次作业.docx

三层交换机第一次作业.docx

上一篇: Docker Compose服务依赖配置全攻略(从入门到生产级实践)
下一篇: 解决容器反复重启难题:Docker Compose依赖控制的4个关键技巧
SimCompile
博客等级 码龄1年 140粉丝 2012原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值