使用自定义bridge网络可实现Golang容器间通过服务名通信,如创建myapp-network后,go-service-1可通过postgres-db:5432连接数据库,Docker内置DNS自动解析容器名,结合Docker Compose管理多服务时更便捷,各服务在共享网络中直接以服务名互访,避免依赖宿主机IP。

在使用 Golang 开发微服务或后端应用时,Docker 是常见的部署方式。为了让多个容器之间能够正常通信,合理的网络配置至关重要。Golang 程序运行在容器中时,常需要与其他服务(如数据库、Redis、API 服务等)交互,这就涉及到 Docker 的网络机制。
Docker 安装后会自动创建几种网络模式,最常用的是 bridge、host 和 none。开发环境下,bridge 是默认模式,适合大多数 Golang 应用场景。
在 bridge 模式下,每个容器拥有独立的网络命名空间和 IP 地址,通过虚拟网桥进行通信。容器间默认不能通过容器名互相访问,除非使用自定义 bridge 网络。
若多个 Golang 服务或依赖组件(如 PostgreSQL)需互相调用,推荐创建自定义 bridge 网络。它支持通过容器名称解析 IP,简化服务发现。
立即学习“go语言免费学习笔记(深入)”;
创建网络命令:
docker network create myapp-network
启动容器时指定该网络:
docker run -d --name go-service-1 --network myapp-network my-go-app
docker run -d --name postgres-db --network myapp-network -e POSTGRES_PASSWORD=123456 postgres
此时,在 go-service-1 的 Golang 代码中,可通过 postgres-db:5432 直接连接数据库,无需使用 IP 或暴露宿主机端口。
当一个 Golang 容器需要调用另一个容器提供的 HTTP 接口时,确保目标容器在同一个网络中,并使用容器名作为主机名。
启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。
0
例如,service-a 要请求 service-b 的 API:
启动两个服务:
docker run -d --name service-a --network myapp-network service-a-image
docker run -d --name service-b --network myapp-network -p 8080:8080 service-b-image
在 service-a 的 Golang 代码中发送请求:
resp, err := http.Get("http://service-b:8080/api/health")
if err != nil {
log.Printf("请求失败: %v", err)
return
}
defer resp.Body.Close()
只要网络配置正确,Docker 内置 DNS 会自动解析 service-b 到对应容器 IP。
对于包含多个 Golang 服务或依赖的项目,Docker Compose 是更高效的管理方式。它默认为所有服务创建一个共享网络,服务间可直接通过服务名通信。
示例 docker-compose.yml:
version: '3.8'
services:
api-server:
build: ./api
ports:
- "8080:8080"
networks:
- app-network
<p>data-worker:
build: ./worker
networks:</p><ul><li>app-network</li></ul><p>redis:
image: redis:alpine
networks:</p><ul><li>app-network</li></ul><p>networks:
app-network:
driver: bridge</p>在这个配置中,api-server 可以在 Golang 代码中直接使用 redis:6379 连接 Redis,data-worker 也可通过 HTTP 调用 http://api-server:8080。
基本上就这些。合理利用 Docker 网络机制,能让 Golang 微服务之间的通信更稳定、配置更清晰。关键是避免依赖宿主机 IP,优先使用自定义网络和容器名通信。不复杂但容易忽略。
以上就是Golang Docker网络配置与容器通信的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号