Docker Compose中的restart详解:什么情况下容器会自动重启?

Docker-Compose 一、Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件... 阅读详情

第一章:Docker Compose中restart策略概述

在使用 Docker Compose 编排多容器应用时,restart 策略是确保服务高可用性的关键配置之一。该策略定义了容器在退出或系统重启后是否以及如何自动重新启动,适用于生产环境中对服务连续性有严格要求的场景。

restart策略的常用取值

  • no:默认值,不自动重启容器
  • on-failure:仅在容器以非零退出码退出时重启,可指定重试次数,如 on-failure:3
  • always:无论退出原因如何,始终重启容器
  • unless-stopped:总是重启容器,除非容器被手动停止

在docker-compose.yml中的配置示例

version: '3.8'
services:
  web:
    image: nginx:latest
    restart: always
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
    restart: on-failure:5

上述配置中,web 服务将始终重启,而 db 服务仅在失败时最多尝试重启5次。

不同策略的应用场景对比

策略适用场景注意事项
no开发调试、一次性任务需手动干预恢复服务
on-failure批处理作业、可能临时出错的服务避免无限循环重启
always长期运行的Web服务即使手动停止也会在Docker守护进程重启后启动
unless-stopped生产环境核心服务最推荐用于需要持久运行的服务

第二章:常见的restart策略类型及其行为

2.1 no策略:容器退出时不进行重启(理论解析与使用场景)

策略定义与核心机制
no 是 Docker 容器重启策略中最基础的一种,表示无论容器因何种原因退出,Docker 守护进程都不会自动重启该容器。该策略适用于一次性任务或需要人工干预的调试场景。
典型应用场景
  • 执行批处理脚本,如数据备份、日志归档等短期任务
  • 开发阶段的容器调试,避免异常退出后无限循环启动
  • 需手动检查失败原因的关键操作,防止自动化掩盖问题
配置示例与参数说明
docker run -d --restart=no ubuntu:20.04 /bin/bash -c "echo 'Hello'; exit 1"
上述命令中,--restart=no 明确指定不重启策略。即使容器内部命令返回非零退出码,Docker 也不会重新拉起容器实例,保障了运行的可控性。

2.2 always策略:无论退出状态如何都重启容器(配置示例与实际应用)

always 重启策略确保容器在任何退出状态下都会被自动重启,适用于需要长期运行的关键服务。

配置示例
version: '3'
services:
  web:
    image: nginx
    restart: always

上述 docker-compose.yml 配置中,restart: always 表示无论容器因何原因退出(包括手动停止或崩溃),Docker 都会重新启动该容器。此行为由 Docker 守护进程监控并触发。

实际应用场景
  • 生产环境中的 Web 服务器,要求高可用性
  • 后台任务守护进程,防止意外中断导致服务不可用
  • 日志收集代理,需持续运行以保障可观测性

该策略与 on-failure 不同,不依赖退出码,适用于必须始终处于运行状态的容器化服务。

2.3 on-failure策略:仅在非零退出码时重启(错误处理机制剖析)

策略触发条件解析
on-failure 重启策略仅在容器以非零退出码终止时触发,适用于预期可恢复的临时性故障。该策略不会响应正常退出(退出码0),避免不必要的重启。
典型应用场景
  • 批处理任务执行失败需重试
  • 依赖服务短暂不可达
  • 网络抖动导致的初始化失败
services:
  worker:
    image: my-worker:latest
    restart: on-failure
    restart_policy:
      max_attempts: 3
      delay: 5s
上述配置表示:任务失败后最多重试3次,每次间隔5秒。max_attempts 防止无限循环,delay 提供恢复窗口。

2.4 unless-stopped策略:持久化运行的守护模式(适用于生产环境的实践)

在Docker容器编排中,restart: unless-stopped 是生产环境中推荐的重启策略之一。它确保容器在异常退出时自动重启,同时尊重管理员的主动停止操作。
策略行为解析
  • 容器正常启动后,即使宿主机重启也会重新运行
  • 仅当管理员手动执行 docker stop 时,才不再重启
  • 意外崩溃、系统重启等场景下自动恢复服务
典型配置示例
version: '3.8'
services:
  app:
    image: myapp:v1
    restart: unless-stopped
上述配置中,restart: unless-stopped 表明除非被显式停止,否则 Docker 守护进程会在启动时自动拉起该容器,实现服务的持久化守护。 该策略平衡了可用性与运维控制权,特别适用于需要长期稳定运行的关键业务组件。

2.5 各restart策略对比分析与选型建议(结合运维需求的决策指南)

在Kubernetes等平台中,常见的重启策略包括Always、OnFailure和Never,其适用场景因服务类型而异。
策略特性对比
策略适用场景自动重启
Always长期运行的服务(如Web服务器)容器退出即重启
OnFailure批处理任务仅失败时重启
Never调试或手动控制场景从不自动重启
典型配置示例
apiVersion: v1
kind: Pod
spec:
  restartPolicy: OnFailure # 适用于Job类任务,避免成功后无限重启
该配置确保任务失败时由控制器重新调度,而执行成功后不再重启,符合批处理逻辑。对于常驻服务,应选用Always以保障高可用性。运维团队需根据应用生命周期和故障容忍度进行精准选型。

第三章:影响容器重启的关键系统因素

3.1 Docker守护进程重启后容器的恢复行为(实验验证流程)

在默认配置下,Docker守护进程重启后不会自动重启正在运行的容器,除非设置了重启策略。为验证该行为,可通过以下步骤进行实验。
实验准备
启动一个带有名称标识的测试容器,并设置重启策略为 `unless-stopped`:
docker run -d --name test-container --restart unless-stopped ubuntu:20.04 sleep 3600
其中 `--restart unless-stopped` 表示除非容器被手动停止,否则守护进程重启后将重新启动该容器。
验证流程
  • 执行 sudo systemctl restart docker 重启Docker服务
  • 使用 docker ps 查看容器状态
  • 观察容器是否自动恢复运行
结果分析
重启策略守护进程重启后行为
no不重启
always自动重启
unless-stopped若未手动停止则重启

3.2 主机系统重启对容器生命周期的影响(持久化部署策略)

当主机系统重启时,容器的生命周期将受到直接影响。默认情况下,Docker 容器不会随宿主机自动启动,导致服务中断。为实现持久化部署,必须采用合适的重启策略。
容器重启策略配置
通过设置 --restart 参数可定义容器在异常或系统重启后的恢复行为:
docker run -d --restart=unless-stopped \
  --name nginx-container \
  -v /data/nginx:/usr/share/nginx/html \
  nginx:latest
上述命令中,unless-stopped 策略确保容器在宿主机重启后自动启动,除非被手动停止。配合数据卷挂载(-v),实现配置与数据的持久化。
策略对比
  • no:不自动重启,适用于临时任务;
  • on-failure:仅在退出码非0时重启;
  • always:无论退出状态均重启;
  • unless-stopped:始终重启,除非被显式停止。

3.3 容器资源限制与OOM引发的重启机制(监控与规避方法)

资源限制配置与OOM关系
在Kubernetes中,容器可通过resources.limits设置内存上限。当容器内存使用超过该值时,内核会触发OOM(Out-of-Memory)终止进程,导致Pod重启。
resources:
  limits:
    memory: "512Mi"
  requests:
    memory: "256Mi"
上述配置表示容器最大使用512MiB内存。若超出,cgroup会触发OOM Killer,优先终止占用内存最多的进程。
监控与告警策略
为提前规避OOM,建议部署Prometheus监控容器内存使用率,并设置告警规则:
  • 监控指标:container_memory_usage_bytes
  • 告警阈值:接近memory limit的80%
  • 通知方式:集成Alertmanager推送至企业微信或邮件
规避措施
合理设置资源限制、启用就绪探针、使用垂直Pod自动伸缩(VPA),可有效降低OOM发生概率。

第四章:服务依赖与健康检查对重启行为的影响

4.1 依赖服务启动失败导致的连锁重启问题(案例模拟与解决方案)

在微服务架构中,服务间依赖关系复杂,当核心依赖服务启动失败时,可能引发调用方频繁重试并触发健康检查失败,进而导致连锁重启。
典型场景模拟
假设订单服务启动时依赖用户服务获取权限信息,若用户服务未就绪,订单服务因连接超时而启动失败,容器平台自动重启实例,形成循环。
解决方案:优雅启动与重试控制
通过设置启动探针和初始延迟,避免过早判定失败:

livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
startupProbe:
  httpGet:
    path: /ready
    port: 8080
  failureThreshold: 30
  periodSeconds: 10
上述配置中,startupProbe 允许最长5分钟用于初始化,期间不进行存活检查,避免因依赖未就绪导致的误判。一旦通过,则交由 livenessProbe 管理。该机制有效切断了因启动风暴引发的连锁反应。

4.2 健康检查未通过时的自动恢复机制(集成restart策略的最佳实践)

在容器化应用运行过程中,健康检查是保障服务稳定性的关键环节。当探针检测到应用异常时,结合合理的重启策略可实现故障自愈。
重启策略配置示例
livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  failureThreshold: 3
restartPolicy: Always
上述配置中,failureThreshold: 3 表示连续三次失败后触发重启;restartPolicy: Always 确保 Pod 在任何终止情况下均被重新拉起,适用于长期运行的服务。
策略选择建议
  • Always:适用于无状态服务,保证始终运行;
  • OnFailure:仅容器异常退出时重启,适合批处理任务;
  • Never:不推荐用于生产环境中的长期服务。

4.3 应用崩溃与信号中断后的容器状态变化(日志分析与诊断技巧)

当容器内应用因未捕获异常或接收到终止信号而崩溃时,其状态会从“running”转变为“exited”,此时需结合日志与退出码进行诊断。
常见信号与退出码含义
  • 137:容器被 SIGKILL 终止,通常因内存超限(OOM)
  • 143:收到 SIGTERM,正常关闭流程被触发
  • 139:SIGSEGV,程序发生段错误
日志提取与分析命令
docker logs --tail 50 --timestamps my-container
该命令获取最近50行日志并显示时间戳,便于定位崩溃时刻的输出信息。配合 --follow 可实时追踪日志流。
容器状态检查表
状态含义建议操作
exited (137)OOM 被杀检查内存限制与应用堆使用
exited (1)应用异常退出查看应用日志栈跟踪
restarting持续重启检查依赖与启动脚本

4.4 网络异常或存储挂载失败引发的重启场景(容错设计思路)

在分布式系统中,网络抖动或存储设备临时不可达常导致节点误判为故障,从而触发非必要重启。为提升系统稳定性,需引入容错机制。
重试与退避策略
采用指数退避重试可有效缓解瞬时故障。例如,在挂载存储失败时进行有限次重试:
func mountWithRetry(device, target string, maxRetries int) error {
    for i := 0; i < maxRetries; i++ {
        err := mountDevice(device, target)
        if err == nil {
            return nil
        }
        time.Sleep(time.Duration(1 << uint(i)) * time.Second) // 指数退避
    }
    return fmt.Errorf("failed to mount %s after %d retries", device, maxRetries)
}
上述代码通过指数级延迟重试,避免因短暂网络波动导致服务中断,降低误重启概率。
健康检查分级
  • 轻度异常:如短暂丢包,仅记录日志并启动重试
  • 严重异常:连续多次挂载失败,上报控制面介入
通过分级响应机制,系统可在保持可用性的同时精准识别真实故障。

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

监控与日志的统一管理
在微服务架构中,分散的日志增加了故障排查难度。推荐使用 ELK(Elasticsearch, Logstash, Kibana)栈集中收集和分析日志。例如,在 Go 服务中集成 Zap 日志库并输出结构化日志:

logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("user login attempted",
    zap.String("ip", "192.168.1.1"),
    zap.Bool("success", false))
自动化部署流程
持续集成/持续部署(CI/CD)是保障系统稳定迭代的核心。建议使用 GitLab CI 或 GitHub Actions 实现自动化测试与部署。以下为典型流水线阶段:
  • 代码提交触发单元测试
  • 构建 Docker 镜像并打标签
  • 推送镜像至私有仓库
  • 通过 Helm 更新 Kubernetes 部署
安全配置最佳实践
确保所有服务通信启用 TLS,并使用短期 JWT 令牌进行身份验证。避免在配置文件中硬编码密钥,应使用 Hashicorp Vault 或 Kubernetes Secrets 管理敏感信息。
实践项推荐方案
认证机制OAuth2 + JWT
密钥轮换周期每7天自动更新
API 访问控制基于角色的访问控制(RBAC)
性能压测常态化
使用
标签嵌入性能测试流程图结构,模拟真实用户负载:
[代码提交] → [触发 CI 流水线] → [启动 Locust 压测] → [生成 QPS 报告] → [异常则阻断发布]
定期执行全链路压测,识别瓶颈服务。某电商平台在大促前通过该机制发现数据库连接池不足,及时将连接数从 50 提升至 200,避免了服务雪崩。
Docker - Docker重启!机器宕机!容器能自己恢复吗? 能! 启动容器的时候,可以指定容器在某些可预测(docker engine重启)与不可预测(机器宕机重启)时的重启行为,利用这个功能,我们可以放心当重启docker engine,也不用担心机器重启导致应用不可用。 这个神奇的功能是“restart polices”,定义了当容器因为某种原因停掉之后的行为,有四种police: 四种重启策略 no,无论什么时候容器因为什么原因宕掉,都不重... 阅读详情

相关推荐

CH340驱动安装全攻略:从Windows到MacOS的避坑指南(2025最新版)

本文提供2025年最新版CH340驱动安装全攻略,涵盖Windows、MacOS和Linux三大操作系统。详细解析了驱动安装的核心原理、标准流程,并针对Windows设备管理器报错、MacOS系统安全限制等常见“坑点”提供了深度排错与解决方案,旨在帮助开发者快速稳定地完成USB转串口通信配置。

earth的博客 426

docker-compose 参数命令详解

1. Docker Compose 产生背景    Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的多种数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。

优快云1csdn1的博客 1万+

PCB 传输线教程(上):基于 Polar Si9000 与嘉立创工艺的传输线设计

理论线宽是W1,但在实际制作时,铜线顶部会有部分被刻蚀掉,表面被刻蚀后的宽度表示为W2,一般取经验值W2=W1-1,单位为 mil,Si9000 里面默认也是采用 W1,W2 相差 1 mil 的方式进行计算。表面阻抗结构就是简单的在一个平面上走信号线,以另外一个平面为地平面,信号线所在平面不进行铺铜(或铺铜间距大到可以忽略不计),这是最简单的一种结构,只需要知道介质层的厚度和介电常数、信号线厚度就可以进行阻抗计算。这个也是经验值,一般保持默认,或者可以填入 C1 相同的值(即忽略堆积)。

Surrea1的博客 1万+

docker-compose up -d 和 restart的区别

docker-compose up -d docker-compose restart docker restart 这三个的区别; 要使用docker-compose首先要进入对应的项目路径下,并且有对应的docker-compose.yml文件; docker-compose restart不会加载新的docker-compose相关文件的新的改动(如,docker-compose.yml文件) 若是使用: docker-compose down ; docker-comp

u010953880的专栏 1万+

车载以太网测试技术解析

在智能汽车与HiL测试领域,高效解析与模拟车载网络通信是开发验证的关键。ZD-Converter 2000以媒体/介质转换器、嗅探器、拦截器、仿真器四合一的颠覆性设计,成为工程师应对复杂车载以太网测试的瑞士军刀。它支持双路车载/标准以太网智能转换、实时通信嗅探、硬件级数据拦截及ECU通信模拟,更通过串口命令实现全参数远程配置,赋能自动化测试流程。本文将深度解析其核心功能与实战应用场景。

Triv2025的博客 1142

CPRI原理及应用--基本原理

本文主要介绍CPRI的基本原理,包括CPRI的发展历程、CPRI基本协议、速率、帧结构、时延模型等

u014035968的博客 2万+

docker-compose 常用命令(附 docker-compose 的安装教程)

docker-compose 常用命令(附 docker-compose 的安装教程)

m0_51913750的博客 3万+

手把手教你用RSoft BPM仿真一个1x2光分束器:从参数设置到结果分析全记录

本文详细介绍了使用RSoft BPM模块设计和仿真1×2光分束器的完整流程,包括参数设置、结构建模、仿真配置和结果分析。通过实战指南,帮助读者掌握光波导器件的仿真技术,实现50:50功率分配的设计目标,适用于光通信和集成光学领域的研究与应用。

weixin_30545945的博客 545

Docker Compose常用命令

在项目所在目录下执行docker-compose up -d命令来启动服务,然后使用浏览器访问localhost:8001和localhost:8002来访问不同的应用。如果需要重构服务,需要在docker-compose.yml文件所在的目录下执行。其中,定义了两个服务app1和app2,它们都是使用myapp镜像构建,命令必须在 docker-compose.yml文件所在的目录下执行。此时,nginx服务和web服务已经在后台运行了。如果需要重构服务,需要在。文件所在的目录下执行。

justlpf的专栏 2万+

补洞与fairing算法

对网格进行补洞,remesh, 平滑,fairing, 最小二乘优化平滑

闪电彬彬的博客 1047

【K8S系列】Kubernetes 中 Pod 无法通过 Service 名称访问服务的 DNS 解析失败问题【已解决】

在 Kubernetes 中,Service 提供了一种稳定的方式,通过名称访问一组 Pod。当其他 Pod 无法通过 Service 名称访问服务,并且出现 DNS 解析失败时,通常会导致应用无法正常工作。本文将详细分析此问题的常见原因及其解决方案。

颜淡慕潇 1万+

Docker Compose中的restart参数详解:如何选择最佳重启条件?

掌握Docker Compose的重启策略选择方法,详解restart参数配置与适用场景。涵盖no、always、on-failure等重启条件的应用区别,提升服务稳定性。运维部署必备技巧,值得收藏。

LearnPlex的博客 1004

【3GPP核心网】【5G】史上最全的5G协议规范总结

物理层信道定义:TS38.211(物理层信号的生成、调制,DMRS和额外DMRS,PRACH configuration index,Point A等介绍)传输信道和控制信道的数据处理:TS38.212(包括复用,信道编码,交织,DCI,DMRS端口号等)物理层控制过程:TS38.213(同步,上行功控,随机接入,UE上报和接收控制消息的过程,SSB等)物理层测量:TS38.215(UE和网络的测量控制,UE测量能力)频率、频点相关F R1:TS38.101-1。

风云说通信 3176

Docker 关闭容器自动启动

Docker启动的时候,有些容器(Containers)会一起启动,如果不需要,可以修改设置为不自动启动。两种办法,一种直接在Docker Desktop的Containers界面,找到需要修改的容器,右边三个点,点击setting,把(重启策略)改为NO。---好像更新后入口不在这了。另外一种办法是直接命令修改。

weixin_28947667的博客 338

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

docker-compose 关机或者重启docker同时重启容器restart always的配置

在相关服务下加 restart: always 就行 version: '2' services: database: build: ./mysql/ command: mysqld --user=root --verbose restart: always environment: MYSQL_DATABASE: "web_level3_s...

fjh1997的博客 4万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

docker内部容器自动重启配置。

1.创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。 登录后复制 docker container update --restart=always 容器名字 操作实例如下: [root@localhost mnt]# docker ps -a CO...

凌晨 183

如何给docker容器加上守护进程

需求推荐方案容器后台运行容器崩溃自动恢复宿主机重启后自动启动容器+ Docker daemon 开机自启容器内运行多个服务supervisord(前台模式)或拆分为多个容器💡核心原则:Docker 的“守护”能力应通过Docker 本身的重启策略实现,而非在容器内模拟传统 Linux 守护进程机制。

AI浩 479

容器重启environment_docker内部容器自动重启配置。

1.创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。docker container update --restart=always 容器名字操作实例如下:[root@localhost mnt]# docker ps -aCONTAINER ID IMAGE COMMAND ...

weixin_42465030的博客 637

在 docker 中设置容器自动启动

在 docker 中设置容器自动启动

leveretz的博客 9587

Docker 容器开机自启排查与修复:把 Restart Policy 从 `always` 改成 `no`(TIL 实战笔记)

重启开发机之后,那些早就不维护的 Docker 容器又被 Docker Desktop 悄悄拉起、自动运行,白白占用端口和内存——这是本地多项目开发者的常见痛点。问题根源在于容器被设置了 `always` 重启策略(Restart Policy),而修复方式很直接:先用 `docker inspect` 确认策略,再用 `docker update --restart no` 逐个关闭自启。本文以

gitblog_01193的博客 358

设置 docker 容器自启动

3、已运行的容器修改其自启动策略。文件中,需要自启动的。

weixin_43406695的博客 4883

在Docker Compose中,`restart`是一个容器重启策略配置项

在Docker Compose中,restart是一个容器重启策略配置项,用于控制容器退出时Docker守护进程的行为。

weixin_36873225的博客 1006

Docker Compose服务依赖与自动重启配置全攻略(资深架构师实战经验)

掌握Docker Compose服务依赖条件重启的正确配置方法,解决微服务启动顺序与依赖同步难题。涵盖depends_on、healthcheck等核心配置技巧,确保服务按需启动与自动重启,提升容器化应用稳定性与部署效率,值得收藏。

QuickTrans的博客 1155

在Windows中已经启动的容器(比如xinference),如何设置让其在每次Docker启动时能自动启动

另外,你也可以通过 Docker Compose 来设置容器的自动启动。如果你的容器是通过 Docker Compose 管理的,可在。在 Windows 中,要设置已启动的容器(如 xinference)在每次 Docker 启动时自动启动,可以使用。如果希望容器在非零退出码时才重启,可以使用。这种策略适合希望容器在 “意外崩溃” 时自动恢复,但 “正常结束” 时不重复启动的场景。命令来启动容器服务,这样设置后,容器将会在系统启动时自动启动。如果容器是正常退出(退出码为 0),则不会重启。

当 AI 开始写文章、绘星空,甚至预测未来,您还在旁观吗?这里将剖开人工智能的思考逻辑,拆解 AI 创作的底层密码,也聊聊人工智能里的人文温度。每篇都有让你拍案的细节,快来解锁 AI 时代的神奇世界! 612
上一篇: Docker容器迟迟不就绪?一线专家亲授3分钟诊断大法
下一篇: 【高可用服务必备技能】:避开Docker SIGKILL陷阱的3个关键步骤
CompiWander
博客等级 码龄1年 168粉丝 1980原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值