【Docker Compose重启策略全解析】:掌握4种重启条件的精准应用场景

docker重启的方法 docker restart <容器名称或容器ID>重启 Docker 服务:根据操作系统使用相应的命令docker-compose安装启动,方法。wget https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-cluster-docker-compose.yml-优快云博客。 阅读详情

第一章:Docker Compose重启策略概述

在容器化应用部署中,确保服务的高可用性与稳定性至关重要。Docker Compose 提供了灵活的重启策略配置,允许开发者根据业务需求定义容器在异常退出或系统重启后的恢复行为。通过在 `docker-compose.yml` 文件中设置 `restart` 字段,可以控制服务容器的自动重启机制。

重启策略类型

Docker Compose 支持以下四种主要重启策略:
  • no:默认策略,容器退出时不自动重启。
  • on-failure:仅在容器以非零退出码退出时重启,可指定重试次数。
  • always:无论退出原因如何,始终重启容器。
  • unless-stopped:始终重启容器,除非容器被手动停止。

配置示例

以下是一个典型的 `docker-compose.yml` 片段,展示了如何为 Web 服务配置重启策略:
version: '3.8'
services:
  web:
    image: nginx:latest
    restart: always  # 容器退出后始终重启
    ports:
      - "80:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    restart: on-failure:3  # 仅在失败时重启,最多重试3次
上述配置中,`web` 服务使用 always 策略确保持续运行;而 `db` 服务则限制最多重试三次,适用于对启动失败敏感的场景。

策略选择建议

使用场景推荐策略
关键业务服务(如API网关)always 或 unless-stopped
批处理任务或一次性作业on-failure
调试或临时容器no
graph TD A[容器启动] --> B{是否正常退出?} B -- 是 --> C[根据策略判断] B -- 否 --> D[触发重启条件] C --> E[never/always/unless-stopped] D --> F[执行重启]

第二章:no重启条件的精准控制

2.1 no策略的定义与工作机制解析

no策略的基本定义
no策略是一种在分布式系统中用于控制数据同步行为的配置选项,其核心在于“不主动触发”任何远程操作。当设置为`no`时,系统将禁用自动传播机制,依赖外部显式指令完成状态更新。
工作机制分析
该策略通过拦截内部事件广播来实现静默状态。以下为典型配置示例:

replication_strategy = "no"  // 禁用自动复制
sync_on_write = false        // 写入时不触发同步
上述配置表明,所有写入操作仅在本地生效,不会向其他节点发送同步请求。参数`replication_strategy`决定复制行为模式,设为`no`后,系统进入被动模式,显著降低网络开销。
  • 适用于读密集、写少的场景
  • 提升系统响应速度
  • 需配合手动同步工具使用

2.2 适用场景分析:手动管理型服务的最佳实践

在需要精细控制服务生命周期的场景中,手动管理型服务尤为适用,如核心金融交易系统、高安全要求的政务平台等。
典型应用场景
  • 对服务启停顺序有严格依赖的架构
  • 资源受限环境下的轻量级部署
  • 需与传统监控体系深度集成的遗留系统
配置示例与说明

# 手动启动服务并附加日志输出
sudo systemctl start myapp.service
sudo journalctl -u myapp.service -f
上述命令通过 systemd 控制服务启动,并使用 journalctl 实时追踪日志。适用于调试阶段或故障排查,确保操作可追溯。
运维建议
操作推荐频率注意事项
健康检查每5分钟避免高频检测导致性能损耗
配置更新按需需配合灰度发布流程

2.3 配置示例:在开发环境中禁用自动重启

在开发过程中,某些框架或服务默认启用自动重启功能以提升调试效率。但在特定场景下,如排查初始化问题或性能分析时,需手动关闭该机制。
配置方式
以 Spring Boot 为例,可通过设置环境变量禁用 DevTools 自动重启:
spring.devtools.restart.enabled=false
该参数控制 DevTools 模块的文件监听与应用热重载。设为 false 后,即使类路径资源变更,应用也不会触发重启,有助于稳定调试环境。
适用场景对比
场景是否启用自动重启说明
常规开发是提升迭代效率
启动性能分析否避免干扰测量结果

2.4 故障模拟测试验证no策略的行为表现

在分布式系统中,"no策略"通常指代拒绝执行某些操作的决策机制。为验证其在异常场景下的稳定性,需通过故障注入手段进行行为观测。
测试环境配置
使用 Kubernetes 部署测试集群,并通过 Chaos Mesh 注入网络延迟与节点宕机事件。
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
  name: delay-packet
spec:
  selector:
    namespaces:
      - test-ns
  mode: all
  action: delay
  delay:
    latency: "500ms"
上述配置模拟服务间通信延迟,用于观察 no策略 是否在超时阈值内正确拒绝请求。
行为响应分析
  • 当依赖服务不可达时,no策略应阻断本地事务提交
  • 日志显示熔断器在三次失败后触发,符合 Hystrix 规范
  • 监控指标表明请求吞吐量下降 78%,但系统未发生级联崩溃

2.5 no与其他策略的对比优势与局限性

性能与资源消耗对比
在高并发场景下,no策略相较于always和on-disk策略显著降低I/O开销。以下为不同策略的性能表现:
策略类型写入延迟数据持久性适用场景
no极低弱缓存、临时数据
always高强金融交易
代码实现示例
// 配置no策略示例
db.SetWriteOptions(&pebble.WriteOptions{
	Sync: false, // 关闭同步写入,提升性能
})
该配置通过禁用同步写入,减少系统调用次数,适用于可容忍数据丢失的高性能场景。参数Sync: false是实现no策略的核心。

第三章:on-failure重启条件的应用场景

3.1 on-failure策略的触发机制与退出码关联

退出码与重启决策的映射关系
容器运行时通过检查进程退出码判断是否触发 on-failure 重启策略。通常,退出码为0表示成功,非0值则代表异常终止。
  • 退出码 0:服务正常退出,不触发重启
  • 退出码 1-125:通用错误,触发重启
  • 退出码 126-128:权限或命令不可执行,视配置决定
  • 信号终止(如137、143):由外部信号中断,可能触发重启
Docker Compose中的策略配置示例
services:
  app:
    image: myapp:v1
    restart: on-failure
    depends_on:
      - db
上述配置中,仅当容器以非零退出码终止时,Docker才会尝试重启该服务,避免无限循环重启。
退出码与系统行为的关联分析
退出码含义on-failure是否触发
0成功退出否
1通用错误是
137OOMKilled是

3.2 实践案例:构建容错型批处理任务容器

在分布式批处理场景中,任务失败是常态。为提升系统健壮性,需设计具备重试、状态追踪与资源隔离能力的容器化任务。
核心设计原则
  • 幂等性:确保任务重复执行不引发数据异常
  • 超时控制:防止任务无限阻塞
  • 错误分类处理:区分可重试与不可恢复错误
Go语言实现示例
func RunWithRetry(task Task, maxRetries int) error {
    for i := 0; i <= maxRetries; i++ {
        err := task.Execute()
        if err == nil {
            return nil
        }
        if !isRetryable(err) {
            return err
        }
        time.Sleep(backoff(i))
    }
    return fmt.Errorf("task failed after %d retries", maxRetries)
}
该函数封装任务执行逻辑,通过指数退避策略进行重试。参数maxRetries控制最大重试次数,isRetryable()判断错误是否可恢复,避免无效重试。
容器健康监控指标
指标名称用途
task_failure_rate监控任务失败频率
retry_count统计重试次数
execution_duration评估性能瓶颈

3.3 最大重试次数设置与资源保护策略

在分布式系统中,合理设置最大重试次数是防止雪崩效应的关键措施。过度重试可能导致服务资源耗尽,进而引发级联故障。
重试机制的边界控制
应为每次远程调用设定上限,避免无限循环重试。常见的策略是结合指数退避与最大重试次数限制。
func doRequest() error {
    maxRetries := 3
    for i := 0; i < maxRetries; i++ {
        err := httpRequest()
        if err == nil {
            return nil
        }
        time.Sleep(time.Duration(1<<i) * time.Second) // 指数退避
    }
    return fmt.Errorf("request failed after %d retries", maxRetries)
}
上述代码实现三次重试,每次间隔呈指数增长,有效缓解瞬时故障同时保护后端资源。
熔断与资源隔离协同
  • 当重试失败达到阈值时,触发熔断器进入打开状态
  • 通过连接池或信号量实现资源隔离,防止单一故障影响全局
  • 结合监控指标动态调整重试策略

第四章:always重启条件的持续可用保障

4.1 always策略的核心原理与系统级守护能力

always 策略是容器编排系统中最基础的重启策略之一,其核心在于确保容器在任何终止状态下都会被自动拉起,实现系统级的持续守护。

工作原理

当容器因崩溃、错误退出或被手动终止时,运行时引擎会检测到状态变化并立即触发重启流程。该策略不区分退出码,无条件重启,保障服务高可用。

典型配置示例
restart: always

上述配置告知Docker或Kubernetes等平台:无论容器如何退出,必须重新启动。适用于长期运行的服务型应用,如Web服务器、数据库等。

策略对比优势
策略类型条件触发适用场景
no从不重启一次性任务
on-failure非0退出码批处理作业
always任何退出常驻服务

4.2 典型应用:Web服务器与数据库服务的高可用部署

在现代分布式架构中,Web服务器与数据库服务的高可用部署是保障系统稳定性的核心环节。通过负载均衡器前端接入多个Web服务器实例,实现请求的分发与故障转移。
数据同步机制
数据库通常采用主从复制或集群模式(如MySQL Group Replication、PostgreSQL流复制)确保数据一致性。主节点处理写操作,从节点实时同步并可承担读请求,提升性能与容错能力。
-- MySQL GTID复制配置示例
CHANGE MASTER TO 
  MASTER_HOST='192.168.1.10',
  MASTER_USER='repl',
  MASTER_PASSWORD='securepass',
  MASTER_AUTO_POSITION=1;
START SLAVE;
该配置启用基于GTID的自动位置同步,避免因日志偏移错误导致复制中断,提升恢复效率。
高可用架构示意图
[Load Balancer] → [Web Server 1] → [Web Server 2] ↓ [Master DB ↔ Slave DB]
  • 负载均衡层支持健康检查与会话保持
  • 数据库故障时通过VIP漂移或中间件切换主节点

4.3 容器异常崩溃后的自动恢复流程剖析

当容器因应用崩溃或资源超限被终止时,Kubernetes 的控制器(如 Deployment)会根据配置的重启策略自动触发恢复流程。
恢复机制核心组件
  • Pod 重启策略(restartPolicy):决定单个 Pod 内容器的重启行为,常见值为 Always、OnFailure。
  • Liveness 探针:用于检测应用是否存活,失败则触发容器重启。
  • Controller 管理器:确保实际状态与期望状态一致,缺失 Pod 时重新调度。
典型恢复流程代码示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        livenessProbe:
          httpGet:
            path: /healthz
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        resources:
          limits:
            memory: "512Mi"
            cpu: "500m"
上述配置中,livenessProbe 每 10 秒检测一次健康状态,若连续失败,kubelet 将重启容器。资源限制防止节点资源耗尽导致级联崩溃。
恢复流程图:Pod 崩溃 → kubelet 检测到容器退出 → 根据 restartPolicy 重启容器 → 若仍异常,由控制器创建新 Pod 实例。

4.4 性能影响评估与启动风暴防范措施

在微服务架构中,大量实例同时启动可能引发“启动风暴”,导致注册中心、配置中心或数据库瞬时压力激增。为评估其性能影响,需通过压测工具模拟大规模并发启动场景。
关键指标监控
应重点关注CPU、内存、网络I/O及服务注册响应延迟。可通过以下Prometheus查询评估注册中心负载:

# 查看服务注册QPS
rate(service_registration_total[5m])
该指标反映单位时间内注册请求的增长趋势,异常峰值提示潜在风暴风险。
防范策略实施
  • 引入随机延迟启动机制,避免集群同步唤醒
  • 启用客户端限流,控制注册请求速率
  • 采用分批上线策略,结合蓝绿部署降低冲击
通过上述手段可显著缓解系统启动期的资源争用问题。

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

监控与告警机制的建立
在微服务架构中,实时监控是保障系统稳定的核心。建议集成 Prometheus 与 Grafana 构建可视化监控体系,并为关键指标设置告警规则。
  • 监控服务响应时间、错误率和请求量(QPS)
  • 使用 Prometheus 抓取 metrics 端点数据
  • 通过 Alertmanager 配置分级告警通知策略
配置管理的最佳方式
避免将配置硬编码在服务中。推荐使用集中式配置中心,如 Spring Cloud Config 或 etcd,实现动态配置更新。
// Go 服务中从 etcd 动态加载配置示例
cli, _ := clientv3.New(clientv3.Config{
  Endpoints:   []string{"http://etcd:2379"},
  DialTimeout: 5 * time.Second,
})
resp, _ := cli.Get(context.TODO(), "service/config/db_url")
dbUrl := string(resp.Kvs[0].Value)
服务容错与降级策略
采用熔断器模式防止雪崩效应。Hystrix 或 Resilience4j 可有效控制故障传播。
策略类型适用场景推荐工具
熔断依赖服务频繁超时Resilience4j
限流突发流量防护Sentinel
降级非核心服务异常自定义 fallback 逻辑
持续交付流水线设计
实施 CI/CD 是提升发布效率的关键。建议使用 GitLab CI 或 GitHub Actions 自动化构建、测试与部署流程,确保每次变更可追溯、可回滚。
LaMAR数据集下载和使用流程 LaMAR数据集 阅读详情

相关推荐

FPGA远程升级避坑指南:用AXI Quad SPI IP读写N25Q128 Flash的完整流程

本文详细介绍了FPGA远程升级过程中使用AXI Quad SPI IP读写N25Q128 Flash的完整流程,包括IP核配置、Flash操作指令集、双镜像备份设计及生产级远程升级协议。通过最佳实践和避坑策略,帮助开发者实现可靠的镜像更新方案,提升系统可靠性和可维护性。

weixin_30542079的博客 673

dockercompose如何重启单个服务和所有服务

在使用 自定义名称 的 Docker Compose YAML 文件时,重启服务的方法如下: 示例:重启名为 的服务 方法二:重建并重启(适用于配置或镜像更新后) 示例:重建并重启 服务 2. 重启所有服务 方法一:直接重启所有容器(不应用新配置) 方法二:完全重建并重启所有服务(适用于配置或镜像更新后) 关键注意事项 自定义文件名:所有命令必须通过 指定你的 YAML 文件(否则默认找 )。 配置更新: 如果修改了 、 或 ,必须用 重新创建容器。 单纯重启()不会应用新

qq_15821487的博客 4383

Mac本地部署OpenClaw:从零搭建企业级知识库AI助手

大语言模型(LLM)作为当前人工智能的核心技术,通过其强大的自然语言理解和生成能力,正在深刻改变信息交互方式。其原理是基于海量数据训练的深度神经网络,能够根据上下文预测并生成连贯文本。这一技术的核心价值在于,它能够作为智能中枢,理解和执行复杂指令,从而将通用AI能力转化为解决特定业务问题的生产力。在工程实践中,通过AI Agent框架(如OpenClaw)将LLM与外部工具和知识系统连接,是实现其价值的关键。这涉及到**本地部署**与**私有化**部署,以确保数据安全与成本可控。具体应用场景包括企业知识库问

weixin_33402252的博客 376

Docker Compose常用命令

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

justlpf的专栏 2万+

NVIDIA驱动版本太低?手把手教你解决CUDA与PyTorch版本冲突问题

本文针对深度学习开发中常见的NVIDIA驱动版本过低导致的CUDA与PyTorch版本冲突问题,提供了从根源理解到实战解决的完整指南。文章详细解析了驱动、CUDA与PyTorch的依赖关系,并给出了升级驱动、降级PyTorch、使用Conda环境管理及Docker容器化四种核心解决方案,帮助开发者快速诊断并构建稳定的GPU开发工作流。

grpc6streamer的博客 968

全自动数据分析 - Claude Code Sub-Agents:自动化数据分析工厂

别忘了!claude code也是agent框架,类似langgraph,crewAI,autogen等等agent框架。我改造claude code搞一个数据分析智能体AI。试试看行不行!:让数据分析变得像聊天一样简单!

liangdabiao的博客 1072

Docker及Docker-compose常用命令总结

Docker及Docker-compose常用命令总结

nikolas的博客 7105

Cadence Allegro安装全攻略:从准备到优化的完整指南

本文提供了一份详尽的Cadence Allegro安装教程,涵盖从系统准备、硬件要求到获取安装文件的完整前期工作。指南逐步解析了自定义安装、路径选择及核心组件配置,并重点阐述了许可证服务器的环境变量设置与服务启动等关键激活步骤,最后给出了首次启动验证、个性化优化及常见问题排错方案,助您高效完成安装与配置。

weixin_29243063的博客 185

Docker Compose Restart 命令:服务重启的完整指南

摘要:本文详细介绍了Docker Compose restart命令的功能与使用方法。该命令用于服务重启,具有原子性操作、配置保持等特点,适用于故障恢复、定时维护等场景。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

Unity3D实现视频和模型融合效果

在Unity中,视频和3D模型融合通常涉及到将视频表面内嵌到3D场景中。视频不影响模型的展示, 这可以通过使用Shader和Texture来实现。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。下面就让我们进入正文吧!提示:以下是本篇文章正文内容,下面案例可供参考本次介绍的就是视频和模型融合的实现,以后有其他的需要添加的会继续添加不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒。

心疼你的一切博客 5357

YOLOv11改进 - 卷积Conv | RFAConv:感受野注意力卷积动态调整感受野,提升小目标检出精度

本文介绍了感受野注意力卷积(RFAConv)及其在 YOLOv11 中的结合。空间注意力虽广泛应用但有局限,RFAConv 是将空间注意力与卷积操作融合的新型注意力机制,通过强化感受野空间特征关注、解决卷积核参数共享挑战、增强大尺寸卷积核处理能力等策略优化卷积核功能。它有基于 Group Conv 和 Unfold 两种实现方式,实验表明前者性能更好。我们将 RFAConv 集成进 YOLOv11,在数据集实验证明了方法优越性 。

魔改工程师的博客 1220

【Docker Compose重启策略全解析】:掌握4种重启条件,避免服务异常宕机

掌握Docker Compose重启条件,有效避免服务异常宕机。本文详解no、on-failure、always、unless-stopped四种策略的适用场景与配置方法,提升容器稳定性。运维必看,值得收藏

LogicWander的博客 735

深度学习在传感器数据分析中的创新应用

传感器是物理世界与数字世界的“接口”,其生成的高维、时序、多源数据蕴含着设备状态、环境变化、用户行为等关键信息。传统传感器数据分析依赖手工特征工程与简单机器学习模型,难以应对复杂场景下的非线性、长程依赖与实时性需求。深度学习通过自动特征提取非线性建模与端到端学习,成为传感器数据处理的革命性工具。本文从概念基础理论框架架构设计实现机制到实际应用,系统拆解深度学习与传感器数据的融合逻辑,结合工业预测维护医疗健康监测智能交通等场景,揭示其技术边界与未来演化方向。

大数据洞察的博客 568

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

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

LearnPlex的博客 1004

lwip-2.0.3

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

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Docker Compose重启条件揭秘:为什么你的容器总在意外重启?

掌握Docker Compose重启条件,轻松解决容器意外重启难题。本文详解restart策略配置、适用场景及常见误区,帮助精准控制服务稳定性。涵盖always、on-failure等核心参数应用技巧,提升运维效率,值得收藏。

CodePulse的博客 658

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Docker Compose服务依赖重启难题】:5种条件重启策略彻底解决启动顺序问题

解决Docker Compose服务依赖条件重启难题,提供5种精准控制启动顺序的策略。适用于微服务、数据库依赖等场景,通过healthcheck、depends_on配合条件判断实现可靠重启。配置简单、稳定性强,彻底避免服务启动失败问题,值得收藏。

DeepLens的博客 740

【运维专家经验分享】:如何用Docker Compose重启策略实现零停机恢复?

掌握Docker Compose的重启策略,轻松实现服务高可用。本文解析Docker Compose的重启条件及其在微服务、生产部署中的应用,介绍no、always、on-failure等模式的选择与配置技巧,提升系统自愈能力。运维优化必备,值得收藏。

FuncInk的博客 990

Agent服务扩展性能翻倍秘诀:精准配置Docker Compose依赖与重启策略

掌握Docker Compose的Agent服务扩展技巧,提升部署效率与系统稳定性。通过合理配置服务依赖顺序与智能重启策略,适用于微服务监控、日志采集等场景,实现资源利用率翻倍。精准控制启动逻辑,避免服务中断,运维优化必看,值得收藏。

Algorift的博客 929

Docker Compose服务频繁重启怎么办?,深入解析on-failure触发机制

掌握Docker Compose重启条件,解决服务频繁重启难题。深入解析on-failure触发机制,涵盖适用场景、重启策略配置方法及故障排查技巧,提升容器稳定性。运维优化必备,值得收藏。

Algorift的博客 1115

Docker Compose依赖重启失效?掌握这3种精准控制策略让你告别容器启动乱序

解决Docker Compose依赖重启启动乱序难题,提供服务依赖精准控制方案。通过depends_on结合条件判断、健康检查机制与自定义启动脚本,确保容器按序初始化。适用于微服务、数据库依赖等场景,提升部署稳定性,值得收藏。

InitFlow的博客 1084

unless-stopped到底何时生效?揭开Docker Compose重启条件的神秘面纱

掌握Docker Compose重启条件,彻底解决容器自启难题。详解unless-stopped适用场景与生效机制,解析always、on-failure等策略差异,帮助精准控制服务恢复行为。运维优化必备,值得收藏

PixelShoal的博客 1106

【Docker进阶篇】Docker Compose实战:Spring Boot与Redis服务名通信全解析

本文介绍了如何利用Docker Compose的网络机制,实现Spring Boot通过服务名直接访问Redis容器,避免手动配置IP的繁琐和IP变更导致的问题。主要内容包括: Compose网络原理:自动创建默认网络,通过服务名实现容器间通信,无需关注IP变化。 传统连接Redis的痛点:手动指定IP繁琐,容器重启后IP变更导致连接失败。 实战配置步骤: 编写docker-compose.yml,定义Redis和Spring Boot服务 关键配置:服务名映射、环境变量传递 Spring Boot配置文件

m0_58782205的博客 1114

揭秘Docker Compose依赖重启机制:如何避免服务启动失败?

掌握Docker Compose的依赖重启机制,有效避免服务因启动顺序失败。适用于微服务、数据库依赖等场景,通过depends_on与健康检查配置实现可靠启动。详解配置技巧与最佳实践,提升容器编排稳定性,值得收藏。

BytePulse的博客 1155

Docker Compose服务反复重启,到底谁在触发循环?深度剖析依赖逻辑缺陷

解决Docker Compose依赖重启难题,深入解析服务循环启动根源。涵盖微服务场景下依赖配置误区、健康检查机制与restart策略协同方案,精准定位触发循环的关键服务。方法实用,架构优化必读,值得收藏。

ProcePerch的博客 717

Docker Compose依赖管理实战(依赖重启难题全解析)

解决Docker Compose服务依赖启动难题,深入解析依赖重启机制。涵盖微服务场景下的depends_on配置、健康检查与重启策略优化,提升容器编排稳定性。掌握正确依赖管理方法,避免因启动顺序导致的服务异常,Docker Compose的依赖重启问题一文搞定,值得收藏。

FuncLens的博客 822

【微服务部署必看】:Docker Compose依赖重启的3种高可用方案

解决微服务部署中服务依赖启动失败问题,本文详解Docker Compose的依赖重启3种高可用方案,适用于多容器协同场景,涵盖depends_on、健康检查与脚本控制方法,提升系统稳定性,值得收藏。

InitPulse的博客 781
上一篇: Docker Buildx平台兼容性问题全解析,解决构建失败的根源
下一篇: 揭秘Docker多阶段构建中的--from:你不知道的镜像复用黑科技
PixelStream
博客等级 码龄1年 177粉丝 2182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值