Docker Compose端口范围配置实战(从入门到精通必备手册)

〖Docker指南⑦〗docker-compose快速入门 docker-compose是docker官方提供的容器编排工具,只支持单机多容器部署,通过yml文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务,重点可以启动多个容器!!! ...... 阅读详情

第一章:Docker Compose端口范围配置概述

在使用 Docker Compose 编排多容器应用时,网络通信是关键环节之一,而端口映射配置直接影响服务的可访问性。通过合理配置端口范围,可以实现多个实例监听不同主机端口,适用于微服务集群、测试环境批量部署等场景。

端口映射基础语法

Docker Compose 支持将容器端口映射到主机端口,语法支持单个端口或端口范围。端口配置位于服务的 ports 字段中,可通过字符串形式定义。
version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "8080-8085:80"  # 将主机 8080-8085 映射到容器 80 端口
上述配置表示启动服务时,Docker 会将主机的 8080 至 8085 端口依次映射到 Nginx 容器的 80 端口。当部署多个副本时,可结合编排工具实现负载分发。

端口范围的应用场景

  • 批量部署多个相同服务实例,每个实例绑定不同主机端口
  • 避免端口冲突,特别是在开发和测试环境中
  • 为监控、调试接口提供独立访问通道

端口配置注意事项

项目说明
权限要求绑定 1024 以下端口需 root 权限或主机授权
端口占用确保主机端口范围未被其他进程占用
防火墙规则公网暴露端口时需配置安全组或 iptables 规则
graph LR A[Compose 文件] --> B{定义 ports} B --> C[单个端口映射] B --> D[端口范围映射] C --> E[主机特定端口] D --> F[动态分配可用端口]

第二章:端口范围配置基础理论与实践

2.1 端口映射机制与Docker网络模型解析

端口映射原理
Docker通过iptables实现宿主机与容器间的端口映射。启动容器时使用`-p`参数可将宿主机端口转发至容器内部端口,例如:
docker run -d -p 8080:80 nginx
该命令将宿主机的8080端口映射到容器的80端口。Docker在iptables的NAT表中插入规则,利用DNAT实现流量重定向。
Docker网络模式
Docker提供多种网络驱动,常见类型包括:
  • bridge:默认模式,容器通过虚拟网桥与外部通信;
  • host:共享宿主机网络命名空间,无端口映射开销;
  • none:完全隔离,不配置网络。
网络通信流程
容器 → 虚拟网桥(docker0) → iptables规则 → 宿主机接口
此链路展示了数据包从容器发出后,经由虚拟网桥和内核网络栈最终到达外部网络的完整路径。

2.2 docker-compose.yml中ports的语法详解

在 `docker-compose.yml` 文件中,`ports` 用于定义容器端口与宿主机之间的映射关系,支持多种书写格式。
短语法(Short Syntax)
使用字符串形式直接声明端口映射:
ports:
  - "8080:80"
  - "443:443"
格式为 `"HOST:CONTAINER"`,将宿主机的 8080 端口映射到容器的 80 端口。若省略宿主机端口,则动态分配。
长语法(Long Syntax)
提供更精细控制,支持额外参数:
ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host
其中 `target` 是容器端口,`published` 是宿主机端口,`protocol` 可选 tcp 或 udp,`mode` 控制端口绑定方式。
  • 短语法适用于简单映射场景
  • 长语法适合需明确配置协议或部署模式的复杂环境

2.3 单个端口与端口范围的区别与应用场景

在网络通信配置中,单个端口用于指定唯一的服务接入点,而端口范围则允许一组连续或非连续的端口共同参与数据传输。这种差异直接影响防火墙策略、服务暴露方式和资源管理效率。
典型使用场景对比
  • 单个端口:适用于明确服务绑定,如 Web 服务器使用 80 或 443 端口
  • 端口范围:常用于视频会议、P2P 传输等需动态分配多个通道的场景
防火墙规则配置示例
# 允许单一 SSH 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 开放端口范围用于 RTP 媒体流
iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT
上述规则中,--dport 22 精确匹配 SSH 服务,而 --dport 10000:20000 定义了 10001 个连续 UDP 端口,满足实时音视频传输的动态需求。

2.4 主机端口冲突原理分析与规避策略

端口冲突的成因
当多个服务尝试绑定同一IP地址的相同端口时,操作系统将拒绝重复绑定,引发“Address already in use”错误。此类问题常见于容器化部署或本地开发环境多实例启动场景。
常见规避方法
  • 使用动态端口分配,避免硬编码固定端口
  • 通过配置文件或环境变量注入端口参数
  • 在启动前检测端口占用情况
端口检测示例代码
// 检查端口是否可用
func isPortAvailable(host string, port int) bool {
    addr := fmt.Sprintf("%s:%d", host, port)
    conn, err := net.DialTimeout("tcp", addr, time.Second)
    if err != nil {
        return true // 可连接说明被占用,此处反向判断逻辑需注意
    }
    _ = conn.Close()
    return false
}
该函数尝试建立TCP连接以探测目标端口状态,适用于服务启动前的预检流程,提升系统健壮性。

2.5 实践:部署多实例服务并配置连续端口范围

在微服务架构中,部署多个服务实例并统一管理端口分配是提升系统可扩展性的关键步骤。为避免端口冲突并简化网络配置,推荐使用连续端口范围进行实例绑定。
服务实例部署配置
通过容器编排工具(如Docker Compose)可快速定义多实例服务。以下为示例配置:
version: '3'
services:
  app-instance:
    image: my-web-app
    ports:
      - "8080-8083:80"
    deploy:
      replicas: 4
该配置将主机的 8080-8083 端口依次映射到4个容器实例的80端口。其中,replicas: 4 表示启动4个副本,端口按顺序自动分配,确保每个实例拥有独立通信通道。
端口映射逻辑说明
  • 主机端口范围必须足够容纳所有实例数量
  • 容器内服务应监听固定内部端口(如80)
  • 外部访问通过负载均衡或服务发现机制路由至具体实例

第三章:高级端口范围配置技巧

3.1 动态端口分配与随机映射实战

在容器化部署中,动态端口分配是实现服务高可用与资源优化的关键机制。通过随机映射宿主机端口,避免端口冲突并提升部署灵活性。
端口映射原理
Docker 等运行时支持 -P 参数自动绑定宿主机临时端口,底层依赖 Linux 的 netfilter 与 NAT 规则实现流量转发。
实战配置示例
docker run -d -P --name webapp nginx:alpine
该命令启动容器时自动映射容器暴露的端口(如 80 → 32768)。可通过 docker port webapp 查看实际映射关系。
  • 优点:避免手动指定端口冲突
  • 缺点:需配合服务发现机制定位实际端口
容器端口宿主机端口协议
8032768TCP

3.2 结合环境变量实现灵活端口配置

在微服务架构中,硬编码端口会导致部署灵活性下降。通过引入环境变量,可实现运行时动态配置服务监听端口。
使用环境变量读取端口
以 Go 语言为例,可通过 os.Getenv 获取环境变量:
package main

import (
    "log"
    "net/http"
    "os"
)

func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080" // 默认端口
    }
    log.Printf("服务启动于端口: %s", port)
    http.ListenAndServe(":"+port, nil)
}
该代码优先从环境变量 PORT 中读取端口号,若未设置则使用默认值 8080,提升应用在容器化环境中的适应能力。
常见环境配置对照表
环境推荐端口变量说明
开发PORT=3000便于本地调试
DockerPORT=8080与外部映射端口解耦

3.3 使用network_mode和host网络模式下的端口处理

在Docker容器化部署中,`network_mode: host` 是一种特殊的网络配置,它使容器共享宿主机的网络命名空间。这意味着容器不再拥有独立的IP地址,而是直接使用宿主机的网络接口。
端口映射行为的变化
当使用 `host` 网络模式时,传统的 `-p` 或 `ports` 映射将失效,因为容器与宿主机共用同一网络栈。服务需直接绑定到宿主机端口。
version: '3'
services:
  web:
    image: nginx
    network_mode: "host"
    # ports配置无效:ports字段在此模式下被忽略
上述配置中,Nginx必须监听宿主机上的80端口,且不能与其他服务冲突。
适用场景与限制
  • 适用于性能敏感型应用,避免NAT带来的网络开销;
  • 常用于监控代理、日志收集器等基础设施组件;
  • 不支持端口隔离,多个host模式服务不可占用相同端口。

第四章:典型应用场景与问题排查

4.1 微服务架构下批量服务端口规划实战

在微服务架构中,批量服务通常承担数据导入、报表生成等高耗时任务。合理规划其服务端口,是避免资源冲突与提升系统可维护性的关键。
端口分配策略
建议采用分段式端口分配,将批量服务集中部署于特定区间(如 8200–8299),便于防火墙策略与监控规则统一管理。
  • 8200–8219:测试环境批量服务
  • 8220–8259:预发环境批量服务
  • 8260–8299:生产环境批量服务
配置示例
server:
  port: 8265
spring:
  application:
    name: batch-report-service
该配置指定当前服务运行在生产区间的第6个端口上,用于生成月度报表任务,避免与实时API服务(通常使用8000–8199)产生端口竞争。
服务注册元数据标记
字段值说明
typebatch标识为批量处理服务
scheduled-time0 2 * * *cron表达式,表示每日凌晨执行

4.2 容器化开发环境中端口范围的高效管理

在容器化开发中,合理管理服务暴露的端口范围是保障环境隔离与协作调试的关键。通过预定义端口策略,可避免端口冲突并提升团队协作效率。
端口映射最佳实践
使用 Docker Compose 时,建议显式声明端口绑定,避免动态分配带来的不确定性:
services:
  web:
    image: nginx
    ports:
      - "8080:80"   # 主机:容器,固定映射便于调试
  db:
    image: postgres
    ports:
      - "5432:5432"
上述配置将容器内服务端口映射至主机固定端口,确保外部工具(如数据库客户端)可稳定访问。
端口范围规划策略
  • 开发端口段(8000–8999):用于前端、API 等应用服务
  • 中间件段(9000–9999):分配给数据库、缓存、消息队列
  • 监控工具段(10000+):Prometheus、Grafana 等可观测性组件
统一团队端口分配规范,可显著降低本地环境冲突概率。

4.3 防火墙与宿主机安全策略对端口的影响

防火墙和宿主机的安全策略在容器网络通信中起着关键作用,直接影响容器端口的可访问性。系统级防火墙(如 iptables、nftables)会拦截未授权的入站连接,即使容器已正确暴露端口。
常见防火墙规则配置
# 允许容器映射端口 8080
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

# 限制仅允许本地访问映射端口
sudo iptables -A INPUT -p tcp --dport 9000 -s 127.0.0.1 -j ACCEPT
上述规则显式放行特定端口流量,第二条进一步通过源地址控制访问范围,增强安全性。
宿主机SELinux与AppArmor的影响
  • SELinux可能阻止容器绑定到受限端口(如 1-1023)
  • AppArmor配置不当会导致进程被强制终止
  • 建议使用 --security-opt 调整容器安全上下文

4.4 常见端口映射失败问题诊断与解决方案

防火墙与安全组配置检查
端口映射失败常源于防火墙或云平台安全组未开放对应端口。确保目标主机的 iptables 或 firewalld 允许外部访问:

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
该命令在 CentOS 系统中永久开放 8080 端口并重载防火墙规则,需确认服务监听与此一致。
Docker 容器端口映射验证
使用 Docker 时,若未正确绑定端口将导致映射失效。通过以下命令启动容器并映射端口:

docker run -d -p 8080:80 nginx
其中 -p 8080:80 表示宿主机 8080 映射到容器 80 端口,需确认容器内服务已监听 80 端口。
常见问题排查清单
  • 确认服务进程已在容器或主机中正常运行
  • 检查是否有多层 NAT 导致端口不可达
  • 验证本地 telnet 测试:telnet localhost 8080
  • 查看系统日志:journalctl 或 docker logs 容器ID

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

监控与告警策略的落地实施
在生产环境中,仅部署监控工具是不够的,必须建立闭环的响应机制。例如,使用 Prometheus 配合 Alertmanager 实现动态告警:

# alert-rules.yml
groups:
  - name: instance-down
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Instance {{ $labels.instance }} is down"
          description: "The instance has been unreachable for more than 2 minutes."
容器化部署中的资源管理
合理配置 CPU 和内存请求与限制,可避免资源争抢导致的服务雪崩。以下为 Kubernetes 中推荐的资源配置模式:
服务类型CPU 请求内存请求CPU 限制内存限制
API 网关200m256Mi500m512Mi
后台任务处理100m128Mi300m256Mi
持续集成流程优化
采用分阶段构建策略可显著提升 CI 效率。推荐使用 GitLab CI 的缓存机制减少重复依赖下载:
  • 将单元测试与集成测试分离至不同阶段
  • 利用 Docker 多阶段构建减少镜像体积
  • 缓存 node_modules 或 vendor 目录以加速流水线
  • 设置自动清理策略防止制品仓库膨胀
海康WEB3.3控件开发包 V3.3 前端vue项目调用实时监控画面 本需求的完成离不开后端将设备映射到公网, 以及前端单独部署demo页面这个思路的转变。 阅读详情

相关推荐

SAP PP模块 MRP配置实战:5步完成工厂级物料需求计划激活

本文详细介绍了SAP PP模块中物料需求计划(MRP)的工厂级配置实战,通过5个关键步骤从基础环境准备到最终激活。内容涵盖SPRO后台配置、MRP控制者定义、主数据设置及核心参数调整,帮助顾问快速掌握MRP配置清单的完整流程,确保物料需求计划的高效运行。

weixin_30431445的博客 342

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解

Docker-compose 是用于定义和运行多容器 Docker 应用程序的编排工具。使用 docker-compose 后不再需要逐一创建和启动容器。可以使用YML文件来配置应用程序需要的所有服务,然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。一个使用Docker容器的应用,通常由多个容器组成

SteveRocket's-Blog 9021

Quantum Espresso实战进阶:HSE混合泛函在能带计算中的精准应用

本文深入探讨了在Quantum Espresso中应用HSE混合泛函进行高精度能带计算的实战方法。针对传统DFT方法低估半导体带隙的问题,HSE通过混合精确交换能,显著提升计算精度。文章详细讲解了从输入文件配置、参数设置(如nqx网格、exxdiv_treatment)、到自洽与非自洽计算流程,以及结果可视化与对比的全过程,并提供了关键的调优与避坑指南,助力实现从PBE到HSE的精准进阶。

weixin_28363123的博客 226

docker-compose编排参数详解

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。Compose可以.yml 或 .yaml 作为文件扩展名。Compose适用于所有环境:生产,登台,开发,测试以及CI工作流程。关于 docker compose 技术可以查看官方文档以下的内容是确立在已经下载好 Docker 以及 Docker Compose,可参看 Docker Compose 的官方安装教程。

ss810540895的博客 4937

Ubuntu服务器通过IPV6端口转发搭建幻兽帕鲁私服实战

本文详细介绍了在Ubuntu服务器上通过IPV6端口转发搭建幻兽帕鲁私服的完整教程。针对只有公网IPV6地址的服务器环境,提供了从硬件检查、端口转发工具配置到游戏服务器安装的全流程解决方案,帮助玩家轻松实现多人联机游戏体验。

weixin_30652491的博客 490

【智能车Code review】——拐点的寻找

CROSSROAD:十字拐点 ROUNDISLAND:环岛拐点 rightfindflag[i]:表示第i行的右线是否被找到,1为找到,0为没有找到 flag_find_huan_rightdown_point :找到环岛右下拐点标志 flag_find_huan_rightmiddle_point:找到环岛右中拐点标志 找拐点的思路:观察一段数据中数据点的走向趋势,并且保证这段数据是准确的。在摄像头畸变比较严重的情况下这种方法不再适用 关于函数的调用请见:https://blog.youkuaiyun.com/qq.

hanhan的博客 1万+

Docker-compose

Docker Swarm 是 Docker 官方提供的容器编排工具,用于管理 Docker 容器集群。Swarm 将一组 Docker 引擎(称为节点)组织成一个集群,这些节点可以是物理服务器或虚拟机。在 Swarm 模式下,你可以定义服务(Services),每个服务可以跨越多个节点部署多个实例(Replicas),从而实现高可用性和负载均衡。Swarm 提供了服务发现、负载均衡、故障恢复等功能,并且支持多种调度策略。Swarm 更适用于大型生产环境,特别是需要自动伸缩、滚动更新和复杂服务管理的场景。

fantuan_sss的博客 1186

Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战)

emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。

wjianwei666的专栏 928

docker-compose 端口映射

Docker Compose 是一个用于定义和运行多个 Docker 容器的工具。在 Docker Compose 中,可以通过设置端口映射来将容器内部的端口映射到主机上的端口。在这个示例中,MySQL 容器的端口没有被映射到主机上,而 WordPress 容器的端口则被映射到了主机的 8000 端口。因此,当使用 Docker Compose 启动这个应用时,可以通过访问。来访问 WordPress 应用。

SMILY12138的博客 3863

Android功耗系列专题理论之一:功耗优化分析思路简介

本文系统介绍了电子系统功耗分析方法,涵盖静态与动态功耗原理、电流波形分析技术和模块化拆解策略。重点阐述了PMIC与CPU协同管理机制、DVFS动态调节技术,以及通过示波器捕获波形特征定位异常的方法。针对亮屏等典型场景,提出三阶段对比分析法,并详细说明硬件/软件拆解方案及混合验证策略。文章还总结了常见问题模块(CPU、多媒体、外设)的排查流程,强调需结合日志分析、温度控制及重复测试确保数据可靠性,为功耗优化提供系统化解决方案。

1459

订餐平台餐厅信息抓取:使用Python爬虫获取商家信息和用户评价

在这篇博客中,我们展示了如何使用Python爬虫抓取订餐平台上的餐厅信息和用户评价数据。通过使用requests和Selenium,我们能够有效地从静态和动态网页中提取数据,并使用pandas和matplotlib对数据进行存储和分析。未来,您可以根据需求进一步扩展功能,例如增加错误处理、增加抓取多个页面的能力,或者使用高级技术如分布式爬虫来抓取更大规模的数据。

2201_76125261的博客 1651

Docker Compose 配置参考

通过合理配置文件,你可以轻松管理和部署多容器应用。遵循最佳实践,如使用命名卷、健康检查、环境变量管理等,可以帮助你构建高效、灵活且易于维护的应用架构。

xiaoheshang_123的博客 3000

计算机视觉 | 面试题:01、过拟合和欠拟合的表现与解决方法

问题 过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合,还有一种是适度拟合,适度拟合就是我们模型训练想要达到的状态,不过适度拟合这个词平时真的好少见,在做酷狗音乐的笔试题时还懵逼了一会,居然还真的有这样的说法。 这应该是基础中的基础了,笔试题都做烂了。那就当做今天周末,继续放个假吧…… 过拟合 过拟合的表现 模型在训练集上的表现非常好,但是在测试集、验证集以及新数据上的表现很差,损失曲线呈现一种高方差状态。(高方差指的是训练集误差较低,而测试集误差比训练集大较多) 过拟合的原因 从两个角度去分析

Mrrunsen的博客 867

Docker Compose端口范围配置实战(从入门到精通必备)

掌握Docker Compose端口范围配置方法,解决多服务端口冲突难题。适用于微服务部署、开发测试环境搭建,支持批量映射与动态分配,提升容器管理效率。实战演示配置语法与最佳实践,值得收藏。

CompiLume的博客 983

深度学习工具包 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")

jre9下载 jdk9

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

Docker Compose中端口范围配置实战(你不知道的高级用法)

掌握Docker Compose的端口范围配置技巧,轻松解决多服务端口冲突问题。适用于微服务部署、开发测试环境搭建,支持批量映射与动态分配,提升容器编排效率。实战演示关键配置语法与避坑要点,值得收藏。

ProceShoal的博客 736

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

如何在Docker Compose中实现动态端口范围映射?,资深架构师亲授秘诀

掌握Docker Compose的端口范围动态映射技巧,解决多服务端口冲突难题。适用于微服务部署、开发测试环境,通过配置端口区间实现自动分配,提升灵活性与资源利用率。资深架构师实战经验分享,值得收藏。

SimProceed的博客 944

Docker Compose 配置文件 docker-compose.yml 详解

Docker Compose配置文件是Docker Compose的核心,用于定义服务、网络和数据卷。格式为YAML,默认路径为./docker-compose.yml,可以使用.yml或.yaml扩展名,目前Compose配置文件格式的最新版本为V3。Compose配置文件中涉及的配置项也比较多,但大部分配置项的含义跟docker run命令相关选项是类似的。本文主要参...

天行健,君子以自强不息;地势坤,君子以厚德载物。 6万+

【Docker Compose端口管理终极指南】:掌握端口范围配置的5大核心技巧

掌握Docker Compose端口范围配置技巧,轻松解决服务暴露与冲突问题。涵盖多容器通信、动态端口映射、主机端口绑定等场景,详解YAML配置语法与最佳实践,提升部署效率与安全性。运维开发必备技能,值得收藏。

AlgoInk的博客 949

Docker进阶——Docker Compose 的详细使用

文章目录Docker进阶——Docker Compose 的详细使用1、Docker Compose 概述2、Docker Compose 安装与卸载2.1、安装2.2、卸载3、Docker Compose 快速开始4、Compose 模板文件指令5、实战:搭建 WordPress6、Docker-Compose 常用命令6.1、命令对象与格式6.2、命令使用说明 Docker进阶——Docker Compose 的详细使用 1、Docker Compose 概述 现有 docker 进行项目部署存在的问

万里顾一程的博客 4万+

docker-compose快速入门及实战

在此之前部署服务都是使用Docker命令来进行的,越到后面执行的Docker命令就会十分复杂且容易出错,而且对于部署多个容器时需要一条一条docker命令去执行,实在是累啊,还有就是一些实战案例以及项目中都是提供了docker compose服务运行命令模板,基于这几个原因,就去现学了下Docker Compose。博客目录索引(持续更新)

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 2174

还在一个个写端口映射?学会这招,一键批量配置Docker Compose端口范围

轻松解决Docker Compose端口配置繁琐问题,掌握端口范围批量映射技巧。通过指定端口范围简化服务暴露配置,适用于微服务开发、多实例部署等场景,提升配置效率与可维护性。学会这一招,高效管理Docker网络,值得收藏。

QuickProceed的博客 971

【docker】Docker Compose 从入门到精通详解及 Spring Boot 项目 Linux 部署实战

本文详细介绍了Docker Compose的基础与高级应用,包括核心概念、安装配置、基础语法和操作命令。第一部分讲解Docker Compose的架构模型、安装方法及YAML配置文件结构,包括服务定义、网络配置和卷管理。第二部分深入探讨服务配置选项、网络设置、健康检查等高级特性,以及Spring Boot项目的部署实践。文章还提供完整的实战案例,涵盖单机部署、集群扩展和性能优化,帮助读者掌握Docker Compose从入门到精通的完整知识体系。

weixin_44338470的博客 1170

【docker-compose】docker-compose的详细使用

我们知道使⽤⼀个 Dockerfile 模板⽂件,可以让⽤户很⽅便的定义⼀个单独的应⽤容器。然⽽,在⽇常⼯作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现⼀个 Web 项⽬,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚⾄还包括负载均衡容器等,我们只能一个一个 ` 写dockerfile文件,然后bulid构建,run手动操作单个容器 ` Compose 恰好满⾜了这样的需求。

linjun的博客 1万+

Docker Compose端口范围配置避坑指南:90%开发者忽略的细节

掌握Docker Compose的端口范围配置技巧,避免服务冲突与映射失败。详解开发、测试环境中多容器端口批量映射的核心方法,提升部署效率。涵盖常见错误与最佳实践,90%开发者忽略的关键细节一文讲透,值得收藏。

DevPath的博客 754

【稀缺干货】Docker Compose端口范围使用全解析:开发与运维必看

掌握Docker Compose端口范围配置方法,解决服务暴露与冲突难题。涵盖开发测试、微服务部署等场景,支持批量映射与动态分配,提升环境一致性与管理效率。配置简洁灵活,助力高效运维,值得收藏。

FuncLens的博客 957
上一篇: 【Docker Compose服务扩展实战】:掌握多容器应用弹性伸缩的5大黄金法则
下一篇: 【Docker高级网络管理】:如何在生产环境中安全绑定容器IP?
ByteGlow
博客等级 码龄1年 149粉丝 1998原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值