如何使用Golang管理Docker网络_Golang Docker网络配置方法
发布时间 - 2026-02-01 00:00:00 点击率:次创建自定义bridge网络需显式指定合法CIDR子网(如/16)、Driver设为"bridge"、网络名仅含小写字母数字和连字符;容器固定IP须在子网内且未被占用;删除前须手动断开所有关联容器。
用 docker-go 创建自定义 bridge 网络
Go 程序直接调用 Docker API 管理网络,核心是使用 github.com/docker/docker/api/types/network 和 github.com/docker/docker/client。创建 bridge 网络时,必须显式指定子网(IPAM.Config),否则 Docker 会拒绝请求并返回 Invalid address: invalid CIDR address 错误。
- 子网掩码至少为
/24,如"172.28.0.0/16"合法,"172.28.0.0/32"不合法 -
Driver字段必须设为"bridge",不能省略(默认值不生效) - 网络名不能含大写字母或下划线,只支持小写字母、数字、连字符
networkResp, err := cli.NetworkCreate(ctx, "my-net", types.NetworkCreate{
Driver: "bridge",
IPAM: &network.IPAM{
Config: []network.IPAMConfig{{
Subnet: "172.28.0.0/16",
}},
},
})
给容器指定网络并设置固定 IP
启动容器时绑定到已有网络并分配静态 IP,关键在 NetworkingConfig 中嵌套 EndpointsConfig,且 IP 必须落在该网络的 Subnet 范围内。若 IP 已被占用,容器会启动失败并报错 IP address already in use。
- 必须先创建网络并确认其存在,否则
NetworkCreate返回的ID为空,后续绑定失败 -
EndpointConfig的IPAMConfig中IPv4Address是字符串,不是net.IP - 一个容器可同时加入多个网络,但每个网络需单独配置
EndpointsConfig
resp, err := cli.ContainerCreate(ctx, &container.Config{
Image: "nginx:alpine",
}, &container.HostConfig{
NetworkingConfig: &network.NetworkingConfig{
EndpointsConfig: map[string]*network.EndpointSettings{
"my-net": {
IPAMConfig: &network.EndpointIPAMConfig{
IPv4Address: "172.28.10.5",
},
},
},
},
}, nil, nil, "my-nginx")
列出网络并过滤内置网络
cli.NetworkList() 默认返回所有网络,包括 bridge、host、none 这些内置网络。实际管理中通常只关心用户创建的网络,需手动过滤 Driver 字段为 "bridge" 且 Scope 为 "local" 的项;Scope 为 "swarm" 表示集群网络,普通单机环境不会出现。
-
NetworkList不支持服务端过滤,必须在 Go 代码中遍历筛选 - 某些网络可能处于
inactive状态(如无容器连接),但依然会被列出 - 字段
Internal为true表示该网络不对外暴露(禁用 NAT),常用于安全隔离场景
networks, _ := cli.NetworkList(ctx, types.NetworkListOptions{})
for _, n := range networks {
if n.Driver == "bridge" && n.Scope == "local" && !n.Internal {
fmt.Printf("Name: %s, ID: %s, Subnet: %s\n",
n.Name, n.ID[:12],
n.IPAM.Config[0].Subnet)
}
}
删除网络前必须断开所有容器
调用 cli.NetworkRemove() 删除网络时,如果仍有容器连接,会立即返回错误:network my-net is busy。Docker 不提供“强制删除”选项,必须先遍历所有容器,检查其 NetworkSettings.Networks 是否包含目标网络名,再逐个断开或停止容器。
- 断开操作用
cli.NetworkDisconnect(),需传入容器 ID 和网络名 - 不能仅靠
ContainerList查状态,要读取每个
容器的详细信息(
ContainerInspect)才能确认网络绑定关系 - 批量操作时注意上下文超时,避免因某个容器卡住导致整个流程阻塞
err := cli.NetworkRemove(ctx, "my-net")
if err != nil && strings.Contains(err.Error(), "is busy") {
// 需先执行断开逻辑,再重试 NetworkRemove
}
网络管理中最容易忽略的是:**子网 CIDR 的合法性校验发生在服务端,但错误提示极简,不指明具体哪个字段出问题;而 IP 冲突、容器未断开等运行时问题又没有自动重试或清理机制——这些都得在 Go 代码里自己兜底。**
# git
# go
# docker
# github
# nginx
# golang
# ai
# .net
# 子网
# 字符串
# internal
# 绑定
# 遍历
# 设为
# 自定义
# 必须先
# 服务端
# 重试
# 的是
# 多个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python高阶函数应用_函数作为参数说明【指导】
如何快速生成可下载的建站源码工具?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
香港服务器租用每月最低只需15元?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
大学网站设计制作软件有哪些,如何将网站制作成自己app?
魔方云NAT建站如何实现端口转发?
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
如何正确下载安装西数主机建站助手?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
如何基于云服务器快速搭建个人网站?
Swift开发中switch语句值绑定模式
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何在万网ECS上快速搭建专属网站?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
如何确保FTP站点访问权限与数据传输安全?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
微信小程序 wx.uploadFile无法上传解决办法
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
如何生成腾讯云建站专用兑换码?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Laravel如何处理文件下载请求?(Response示例)
,南京靠谱的征婚网站?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
如何确保西部建站助手FTP传输的安全性?
详解jQuery中的事件
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Python函数文档自动校验_规范解析【教程】
canvas 画布在主流浏览器中的尺寸限制详细介绍
javascript基于原型链的继承及call和apply函数用法分析
如何在腾讯云服务器上快速搭建个人网站?


