【实战干货】从容器连接宿主机数据库:必须掌握的IP获取技巧

Docker:容器内服务访问宿主机中的MySql服务 阅读详情

第一章:Docker容器连接宿主机数据库的挑战

在使用Docker进行应用开发时,容器化服务常常需要访问运行在宿主机上的数据库。这种架构虽然简化了本地开发环境的搭建,但也引入了一系列网络通信问题。由于Docker默认使用桥接网络模式,容器与宿主机之间并非共享同一网络命名空间,导致容器无法直接通过localhost或127.0.0.1访问宿主服务。

网络隔离带来的连接障碍

Docker容器运行在独立的网络环境中,即使数据库运行在宿主机上,容器内的应用尝试连接127.0.0.1:3306时,实际指向的是容器自身的回环地址,而非宿主机。这使得标准的本地连接配置失效。

解决方案概览

  • 使用特殊DNS名称host.docker.internal(Docker Desktop和部分Linux环境支持)指向宿主机
  • 将容器加入host网络模式,共享宿主机网络栈
  • 通过宿主机真实IP地址(如192.168.x.x)暴露数据库服务

推荐连接方式示例

version: '3.8'
services:
  app:
    image: my-web-app
    environment:
      - DB_HOST=host.docker.internal
      - DB_PORT=3306
该配置利用Docker提供的内部DNS解析机制,在容器内通过host.docker.internal自动定位宿主机,适用于开发环境快速对接MySQL、PostgreSQL等本地数据库。

防火墙与权限配置注意事项

检查项说明
数据库绑定地址确保数据库监听0.0.0.0而非仅127.0.0.1
操作系统防火墙开放对应端口(如3306)供Docker网桥访问
用户远程访问权限数据库账户需允许来自Docker子网的连接

第二章:理解容器网络与宿主机通信机制

2.1 容器网络模式详解:bridge、host、none

Docker 提供多种网络模式以适应不同的应用场景,其中最常用的是 bridge、host 和 none 模式。
Bridge 模式:默认的网络模式
容器启动时若未指定网络,将自动接入默认 bridge 网络。Docker 会为容器分配独立的网络命名空间,并通过虚拟网桥实现外部通信。
docker run -d --name web nginx
# 默认使用 bridge 模式,通过 docker0 网桥与主机通信
该模式下容器拥有独立 IP,端口需通过 -p 映射至主机,适用于大多数隔离场景。
Host 模式:共享主机网络栈
使用 host 模式时,容器不再拥有独立的网络命名空间,直接复用主机的网络接口。
docker run -d --network=host --name api-server nginx
此方式减少网络开销,提升性能,但牺牲了网络隔离性,适用于对延迟敏感的服务。
None 模式:完全封闭的网络环境
容器仅保留 loopback 接口,无任何外部网络访问能力。
模式独立IP网络隔离适用场景
bridge是高通用服务部署
host否低高性能要求服务
none否极高离线任务处理

2.2 Docker默认网桥下的通信限制分析

Docker 默认使用 bridge 网络模式启动容器,该模式下所有容器通过虚拟网桥 `docker0` 连接到宿主机网络。虽然处于同一网桥的容器可通过 IP 直接通信,但存在明显的通信限制。
主要通信限制
  • 容器间无法通过容器名称进行解析,仅支持 IP 通信
  • 外部网络访问容器需显式发布端口(-p)
  • 不同宿主机上的容器无法直接互通
网络配置示例
docker run -d --name web1 nginx
docker run -it --name web2 alpine ping 172.17.0.2
上述命令中,web2 需知道 web1 的实际 IP 才能通信,缺乏服务发现机制。
技术局限性对比
特性默认网桥自定义网桥
域名解析不支持支持
端口暴露需手动映射内部自动开放

2.3 host模式的优势与安全考量

性能优势显著
host网络模式下,容器直接使用宿主机的网络栈,避免了额外的网络虚拟化开销。这使得网络延迟更低,吞吐更高,特别适用于对网络性能敏感的应用场景。
docker run --network=host nginx
该命令启动的Nginx容器将共享宿主机网络命名空间,无需映射端口即可通过宿主机IP直接访问服务。
安全风险需警惕
由于容器与宿主机共享网络接口,容器内进程可直接监听任意端口(包括特权端口),增加了攻击面。若容器被入侵,攻击者可能利用此特性进行横向渗透。
  • 避免在生产环境无限制使用host模式
  • 结合SELinux或AppArmor强化访问控制
  • 仅在可信容器镜像中启用该模式

2.4 使用自定义网络实现高效通信

在分布式系统中,标准通信协议往往无法满足高性能与低延迟的需求。通过构建自定义网络协议,可针对特定业务场景优化数据传输效率。
协议设计原则
  • 精简头部开销,减少元数据体积
  • 采用二进制编码提升序列化性能
  • 支持连接复用以降低握手成本
代码示例:基于 TCP 的轻量通信框架
type Message struct {
    Type uint8
    Data []byte
}

func (c *Connection) Send(msg *Message) error {
    buf := make([]byte, 1+len(msg.Data))
    buf[0] = msg.Type
    copy(buf[1:], msg.Data)
    _, err := c.Conn.Write(buf)
    return err
}
该实现将消息类型与负载直接拼接为二进制流,避免 JSON 等文本格式的解析开销。头部仅使用 1 字节标识类型,适合内部服务间高频短报文通信。
性能对比
协议类型吞吐量 (QPS)平均延迟 (ms)
HTTP/JSON12,0008.2
自定义二进制45,0002.1

2.5 容器访问宿主机网络的底层原理剖析

网络命名空间与共享机制
Linux通过网络命名空间实现网络隔离。容器默认拥有独立的网络栈,但可通过设置network_mode: host共享宿主机网络命名空间。
version: '3'
services:
  app:
    image: nginx
    network_mode: "host"
上述配置使容器直接使用宿主机的lo、eth0等接口,绕过虚拟网桥,降低网络延迟。
数据包路由路径
当容器共享宿主机网络时,其发出的数据包无需经过NAT或veth设备转发,直接进入宿主机协议栈处理。
模式是否独立网络栈端口映射需求
bridge是需要
host否不需要
该机制适用于对网络性能敏感的服务,如实时通信系统。

第三章:获取宿主机IP的核心方法

3.1 通过网关地址自动发现宿主机IP

在容器化环境中,获取宿主机IP是实现服务通信的关键步骤。Linux系统中,容器可通过默认网关地址推断宿主机的网络位置。
获取默认网关
通过查询路由表可获得默认网关:
ip route | grep default
# 输出示例:default via 172.18.0.1 dev eth0
该命令返回默认路由的网关地址,通常即为宿主机在Docker网桥中的IP。
自动化提取脚本
可使用以下脚本自动提取网关IP:
HOST_IP=$(ip route | awk '/default/ {print $3; exit}')
echo "Host IP: $HOST_IP"
其中,$3 对应输出中的网关字段,awk 提取后赋值给变量。
典型应用场景
  • 容器内服务连接宿主机数据库
  • 调试工具访问宿主机API
  • 日志收集代理上报数据
该方法无需额外配置,适用于大多数基于Linux的容器运行时环境。

3.2 利用环境变量传递宿主机IP地址

在容器化部署中,容器需要与运行于宿主机上的服务通信时,获取宿主机真实IP是关键。Docker默认网络模式下,容器无法直接识别宿主机的IP地址,此时可通过环境变量显式传递。
设置环境变量的常见方式
启动容器时,使用 -e 参数注入宿主机IP:
docker run -e HOST_IP=$(hostname -I | awk '{print $1}') myapp
该命令动态获取宿主机主网卡IP并作为环境变量传入容器,适用于开发和测试环境。
应用中的使用示例
在应用程序中读取环境变量:
hostIP := os.Getenv("HOST_IP")
if hostIP == "" {
    log.Fatal("HOST_IP environment variable is required")
}
targetService := fmt.Sprintf("http://%s:8080", hostIP)
代码逻辑首先检查环境变量是否存在,避免因配置缺失导致连接失败,提升容错能力。
优缺点对比
优点缺点
配置灵活,适配多环境需手动管理IP变更
无需修改镜像内容不适用于大规模集群

3.3 在不同操作系统下的适配实践(Linux/macOS/Windows)

在跨平台开发中,确保程序在 Linux、macOS 和 Windows 上稳定运行是关键挑战。不同系统在路径分隔符、文件权限、进程管理等方面存在差异,需针对性处理。
路径处理的统一方案
使用语言内置的路径库可有效屏蔽差异。例如 Go 中的 path/filepath 包自动适配:

import "path/filepath"

// 自动根据系统选择 / 或 \
configPath := filepath.Join("home", "user", "config.json")
该代码在 Linux/macOS 生成 home/user/config.json,在 Windows 生成 home\user\config.json,提升可移植性。
系统特性适配对照表
特性LinuxmacOSWindows
行结束符\n\n\r\n
可执行权限需 chmod需 chmod忽略

第四章:实战场景中的连接配置与优化

4.1 配置MySQL/PostgreSQL从容器连接宿主机

在容器化环境中,数据库服务常运行于独立容器内,但某些场景需从容器连接宿主机上的数据库实例。实现该通信的关键在于网络配置。
使用 host.docker.internal 通用域名
Docker 为容器提供了特殊 DNS 名称 `host.docker.internal`,可解析为宿主机 IP 地址,适用于 macOS 和 Windows,在 Linux 上需手动启用。
version: '3.8'
services:
  app:
    image: postgres:15
    environment:
      - DB_HOST=host.docker.internal
      - DB_PORT=5432
上述配置中,`DB_HOST` 指向宿主机,使容器内应用可访问运行在宿主机的 PostgreSQL 服务。Linux 环境下需添加 `extra_hosts` 显式映射:
extra_hosts:
  - "host.docker.internal:host-gateway"
此配置确保容器可通过标准网络协议与宿主机数据库建立 TCP 连接,实现跨环境一致的网络拓扑。

4.2 解决防火墙与端口暴露问题

在微服务架构中,服务通常运行在私有网络内,直接暴露端口会带来安全风险。通过合理配置防火墙策略和使用反向代理,可有效控制访问入口。
防火墙规则配置示例
# 允许特定IP访问8080端口
sudo ufw allow from 192.168.1.100 to any port 8080 proto tcp
# 拒绝所有其他外部访问
sudo ufw default deny incoming
上述命令限制仅来自192.168.1.100的请求可访问服务端口,提升安全性。默认拒绝策略防止未授权扫描。
常用端口映射对照表
服务类型内部端口对外端口
用户服务808180
订单服务80828080

4.3 使用docker-compose实现自动化连接

在微服务架构中,手动管理多个容器的启动与网络连接效率低下。`docker-compose` 通过声明式配置文件统一编排服务,实现容器间的自动发现与通信。
核心配置示例
version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    depends_on:
      - app
  app:
    build: ./app
    environment:
      - DB_HOST=database
    networks:
      - backend
  database:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - backend

networks:
  backend:

volumes:
  db_data:
该配置定义了三层服务:前端 Nginx、应用服务与 PostgreSQL 数据库。`depends_on` 确保启动顺序,自定义 `backend` 网络使服务可通过主机名通信,无需手动暴露端口或链接容器。
优势分析
  • 服务间通过内部网络高效通信
  • 配置即代码,提升环境一致性
  • 一键部署:docker-compose up

4.4 性能测试与连接稳定性调优

在高并发场景下,系统的性能表现和连接稳定性至关重要。通过压力测试工具模拟真实负载,可精准识别瓶颈环节。
性能测试方案设计
采用 wrk 进行 HTTP 压测,命令如下:
wrk -t12 -c400 -d30s http://api.example.com/users
该命令启动 12 个线程,维持 400 个长连接,持续压测 30 秒。参数 -t 控制线程数,-c 设置并发连接数,-d 定义测试时长,适用于评估服务端吞吐能力。
连接池参数优化
数据库连接池配置直接影响系统稳定性,推荐以下参数设置:
参数建议值说明
max_open_conns100最大打开连接数,避免资源耗尽
max_idle_conns20保持空闲连接数,降低建立开销
conn_max_lifetime30m连接最长存活时间,防止僵死

第五章:最佳实践与未来演进方向

构建可维护的微服务架构
在现代云原生系统中,微服务拆分应遵循单一职责原则。例如,使用领域驱动设计(DDD)划分服务边界,确保每个服务独立部署、数据自治。以下是一个 Go 语言实现的服务健康检查示例:

func HealthHandler(w http.ResponseWriter, r *http.Request) {
    status := map[string]string{
        "status":    "healthy",
        "service":   "user-service",
        "timestamp": time.Now().UTC().Format(time.RFC3339),
    }
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(status)
}
实施持续性能优化策略
定期进行性能压测并建立基线指标是保障系统稳定的关键。推荐使用 Prometheus + Grafana 监控链路延迟、GC 时间和内存分配率。常见优化手段包括:
  • 启用 HTTP/2 以减少连接开销
  • 使用连接池管理数据库访问
  • 对高频读操作引入多级缓存(Redis + Local Cache)
安全加固与自动化合规
生产环境需强制实施最小权限模型。Kubernetes 中可通过如下 RBAC 配置限制服务账户能力:
资源类型允许操作作用域
Podsget, list, watchnamespace-local
Secretsgetread-only
向 Serverless 架构平滑演进
企业可逐步将非核心模块迁移至函数计算平台。例如,将日志处理、图像压缩等事件驱动任务部署在 AWS Lambda 或阿里云 FC 上,降低运维成本并提升弹性响应能力。结合 Terraform 实现基础设施即代码,保障环境一致性。
从Redis到CouchDB与H2:数据库未授权访问与RCE漏洞实战解析 数据库未授权访问是网络安全中常见的高危风险,其核心原理在于数据库服务因配置不当或设计缺陷,暴露了本应受控的接口或功能,允许攻击者在未经认证的情况下执行恶意操作。从技术实现上看,这类漏洞往往源于服务默认配置不安全、权限校验缺失或功能模块过度开放。其技术价值在于,一旦被利用,攻击者可直接读取敏感数据、篡改信息,甚至实现远程代码执行(RCE),从而完全控制服务器。在应用场景上,除了广为人知的Redis,像CouchDB这类NoSQL数据库和H2database这类嵌入式数据库,因其在开发框架、内容管理系统及IoT 阅读详情

相关推荐

Docker 神话背后:那些鲜为人知却至关重要的实用技巧,错过悔断肠!

要是你对 Docker 深入学习有需求,优快云 学院里有不少优质的 Docker 相关课程,能助你进一步提升技能。这样 container1 和 container2 就可以通过容器名相互访问了。目录,容器内 MySQL 产生的数据就会持久化存储在宿主机的对应目录中。就是挂载数据卷的操作,将宿主机的。然后在启动容器时,通过。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 205

Docker从容器中项目如何访问到宿主机MYSQL

Docker从容器中项目如何访问到宿主机MYSQL

风水道人 1万+

Unity游戏开发实战:用柏林噪声打造3D随机地形(附完整C#代码)

本文详细介绍了如何在Unity游戏开发中使用柏林噪声算法生成3D随机地形,包含完整的C#代码实现。从基础柏林噪声原理到高级参数控制,再到性能优化和常见问题解决,帮助开发者掌握程序化地形生成技术,打造丰富多变的游戏世界。

weixin_29281941的博客 101

docker容器连接宿主机redis和mysql

当我们在用docker部署项目的时候可能会遇到这样一个问题:项目A和项目B都用到了redis和mysql,如果在docker-compose里link或者dependon一个redis和mysql的话,会发现每一个项目都有一个redis和mysql,这样如果项目多了也会产生很多的redis和mysql,看着挺不爽而且也浪费资源的,那能不能让这些项目都能连同一个redis和mysql呢?

weixin_50117915的博客 7015

Playwright Java环境配置避坑指南:浏览器路径、类加载与离线部署

Playwright作为现代端到端测试框架,其Java SDK突破了传统Selenium的Driver管理模式,将Chromium/Firefox/WebKit内核视为可编程运行时资源。其核心原理在于SDK与浏览器二进制分离——Maven仅管理Java字节码,而浏览器需独立下载、校验与沙箱加载。这一设计带来显著技术价值:跨平台一致性、进程隔离安全性及多浏览器并行能力;典型应用场景涵盖Spring Boot集成测试、金融级离线CI/CD、Kubernetes容器化部署及Air-Gapped封闭环境。然而,因J

weixin_32956805的博客 678

pi-star图形界面安装指南

pi-star图形界面安装指南,MMDVM热点安装,树莓派3B+热点

blueisman的专栏 1909

【docker知识】从容器中如何访问到宿主机

使用 Docker 能实现服务的容器化,并使用容器间网络在它们之间进行通信。有时您可能需要一个容器来与宿主机上非容器化的服务通信。以下是如何从 Docker 容器中访问本地主机或 127.0.0.1的具体方法。

gongdiwudu的专栏 5万+

CPG控制网络入门

从线性变换开始推导

妖米的博客 5044

Docker容器内访问宿主机MySQL

背景 最近把docker的一些基本操作都学了一下,想试着把个人博客通过docker来进行部署,部署过程中遇到了这么一个问题: liquibase.exception.DatabaseException: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 这问题看着就像连接不上数据库,所以就报错了,只要解决Docker容器内访问宿主机的MySQL,这个问题就能得到解决。 解决(CentOS8)

weixin_45149355的博客 7863

王炸联动!OpenClaw 对接微信 / 企业微信保姆级教程,AI 办公效率翻倍

《OpenClaw对接微信/企业微信全指南》摘要:本文提供开源AI智能体OpenClaw与微信生态的完整对接教程。核心内容包括企业微信配置四步法(获取凭证、修改配置、重启服务、验证对接)和个人微信通过企业微信插件的一键打通方案。对接后支持微信/企微发指令AI秒执行、群聊机器人、文件同步等高效办公场景,并附常见问题排查代码。教程强调配置简单(全程可复制代码)、适用广泛(个人/团队场景),实现沟通与AI协作的无缝衔接。文末包含端口放行等实用命令,助力用户快速实现移动端AI办公。(149字)

2501_93651177的博客 584

【HAL库】STM32CubeMX开发----STM32F407----ETH+LWIP----TCPclient客户端

STM32F407开发板 为TCPclient客户端,PC端 为TCPserver服务端,相互之间的发送和接收实验。

MQ0522的博客 3048

docker ip限制_Docker干货

目录镜像容器网络构建dockerfile构建docker-compose镜像镜像命令行帮助:docker images help查看镜像:dockerimages镜像仓库软件搜索:dockersearch镜像名称镜像拉取:dockerpull镜像名称:1.11//不加版本号则拉去最新的删除镜像:dockerimagerm-fIMAGEID//参数f代表强制删除...

weixin_31678781的博客 1020

关闭搜狗输入法右下角广告的解决方案

本文主要介绍了关闭搜狗输入法右下角广告的解决方案,希望能对使用搜狗输入法的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

docker 查看ip_Docker干货

目录镜像容器网络构建dockerfile构建docker-compose镜像镜像命令行帮助:docker images help查看镜像:dockerimages镜像仓库软件搜索:dockersearch镜像名称镜像拉取:dockerpull镜像名称:1.11//不加版本号则拉去最新的删除镜像:dockerimagerm-fIMAGEID//参数f代表强制删除...

weixin_39946313的博客 790

STM32F103/F407/H743不同GPIO速度配置(HAL库)对应的最高速度

详细介绍了STM32F103/F407/H743不同GPIO速度配置(HAL库)对应的最高速度。

kevin1499的博客 5589

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

马哥Linux运维 | 深入解析Docker容器网络:全面掌握配置与优化技巧(上)

深入解析Docker容器网络:全面掌握配置与优化技巧。由于篇幅略长,分为上下两部分讲解。

csdn_xmj的博客 1282

深度学习工具包 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 - 解决容器化中的端口冲突问题,动态端口分配

当你的mvn verify包含数据库、Redis、MockServer 等依赖时,硬编码端口是灾难之源。Testcontainers 提供了开箱即用的动态端口能力。端口冲突不是 Docker 的 bug,而是我们尚未进化出与容器范式匹配的工程思维。静态端口是虚拟机时代的遗存,而动态端口是云原生的呼吸节奏 🌬️。从的极简自动分配,到 Compose 环境变量驱动的开发友好体验,再到 Testcontainers 支撑的可靠 CI 测试,

千淘万漉虽辛苦,吹尽狂沙始到金 5798

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

必须知道的基础Docker容器网络命令

往期精选●架构师高并发高性能分布式教程(4000G) ● 39阶段精品云计算大数据实战视频教程● 互联网技术干货视频教程大全【菜单为准】● 2017年8月最新In...

公众号-老炮说Java 242

Docker 容器日志和监控

本文探讨了Docker容器化架构中的日志与监控体系。日志方面,介绍了Docker的日志驱动机制,强调生产环境需配置日志滚动策略,并推荐了ELK/EFK和PLG(Loki)两种集中式日志收集方案。监控方面,解析了基于cgroups的资源监控原理,重点推荐Prometheus + cAdvisor + Grafana组合作为标准监控套件。文章最后提供了不同规模环境的最佳实践建议:单机环境使用基础工具,生产环境应采用集中式日志和监控系统,并强调应用层日志应输出到stdout/stderr,运维需同时关注容器和宿主

尽日寻春不见春,芒鞋踏遍陇头云。归来笑拈梅花嗅,春在枝头已十分。 210

干货 | 携程万台规模容器云平台运维管理实践

作者简介周昕毅,携程系统研发部云平台高级研发经理。现负责携程容器云平台运维,Cloud Storage及Cloud Network基础设施研发及运维。*本文来自于周昕毅在...

携程技术中心 883

【架构师私藏干货】:构建稳定Docker多容器环境的6大黄金法则

掌握Docker多容器运行的稳定架构设计,解决微服务部署难题。涵盖网络配置、数据卷管理、编排工具使用等6大核心方法,适用于生产环境部署与团队协作开发。提升应用隔离性与运维效率,值得收藏。

BreakVein的博客 869

干货 | 携程混合云之kubernetes@AWS揭秘

作者简介陈丹双,携程高级工程师,毕业于复旦大学,积累多家公有云对接经验,持续探索混合云,关注kubernetes、docker等容器技术。一、引言随着携程国际化战略的实...

携程技术中心 682

Docker Compose: 多容器应用的“编排说明书”

Docker Compose是一个通过YAML文件定义和运行多容器应用的工具。它解决了手动管理多个容器时的复杂性问题,如启动顺序控制、网络配置和参数管理等。核心功能包括:使用image/build定义容器、ports映射端口、volumes挂载数据、environment设置环境变量、depends_on控制依赖关系等。典型应用场景是前端+后端+数据库的完整项目部署,服务间通过服务名直接通信。常用命令包括docker compose up/down启动停止服务,ps/logs查看状态,exec执行命令等。D

尽日寻春不见春,芒鞋踏遍陇头云。归来笑拈梅花嗅,春在枝头已十分。 730

Docker 网络:默认三大模式

想象一下,你有一个包含 Web 服务器、数据库和缓存的微服务应用。这些容器需要相互通信,同时也需要被外部访问。`Docker 网络`系统就是为了解决这些通信问题而设计的。没有网络,容器就像孤岛一样无法协作。

尽日寻春不见春,芒鞋踏遍陇头云。归来笑拈梅花嗅,春在枝头已十分。 871

Docker 容器监控方案怎么选?看看这套开源方案!

点击上方“民工哥技术之路”选择“星标”每天为你分享不一样的干货读者福利!多达 2048G 各种资源免费赠送随着线上服务的全面docker化,对docker容器的监控就很重要了。SA的监...

民工哥的博客 983

面试官:Docker 有几种网络模式?5 年工作经验都表示答不上来。。

点击关注公众号,Java干货及时送达推荐阅读:Spring 旗下最牛逼的国产项目!Nacos 2.2 正式发布,这次更新太炸了!作者:知知行行链接:https://www.cnblogs.com/loronoa/p/16566818.htmldocker容器网络Docker在安装后自动提供3种网络,可以使用docker network ls命令查看[root@localhost~]#docke...

Java技术栈,分享最主流的Java技术 412
上一篇: 构建高可用分布式系统的秘密武器:Docker Compose多网络连接全指南
下一篇: 【VSCode Java调试高手进阶】:掌握断点条件设置的5大核心技巧
DebugLoom
博客等级 码龄1年 176粉丝 2107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值