在Go项目开发中,我们经常需要同时运行数据库、消息队列等辅助服务。借助Docker Compose,可以用一个配置文件统一管理Golang应用和它的依赖,大幅提升本地开发效率。

为什么用Docker Compose搭建Golang开发环境
传统方式下,开发者要自己安装PostgreSQL、Redis,还要配置Go版本。不同机器容易出现版本偏差。Docker Compose把这些都写进声明文件,任何人拉取代码后执行一条命令即可获得一致环境。
- 环境一致:镜像版本固定,不受宿主机影响
- 依赖隔离:数据库等服务运行在容器中,不污染本机
- 快速启停:一条
docker_compose_up命令启动全部服务
编写docker-compose.yml
假设我们有一个简单的Golang Web服务,需要PostgreSQL。下面给出基础编排文件。
version: "3.8"
services:
app:
image: golang:1.21
working_dir: /app
volumes:
- ./:/app
ports:
- "8080:8080"
command: go run main.go
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: devpass
POSTGRES_DB: devdb
ports:
- "5432:5432"
实现代码热更新与调试
上面配置把当前目录挂载到容器/app,修改本机代码后,容器内go_run会重新编译。若使用Delve调试,可把command换成启动dlv远程服务。
Go程序示例
以下是一个最小HTTP服务,连接数据库前先暴露接口。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello from Golang in Docker Compose")
})
// 监听8080端口,与compose端口映射一致
http.ListenAndServe(":8080", nil)
}
常用操作命令
| 命令 | 作用 |
|---|---|
| docker compose up | 启动所有服务 |
| docker compose down | 停止并移除容器 |
| docker compose logs app | 查看Go应用日志 |
注意事项
生产环境不建议用go_run直接跑,应写Dockerfile做多阶段构建。开发用Compose重在方便,记得把.env里的密码换成测试专用值,不要连真实库。
小技巧:在compose里加一个volume缓存Go模块,能显著加快重复构建速度。模块缓存配置片段
services:
app:
volumes:
- go_mod_cache:/go/pkg/mod
volumes:
go_mod_cache:
通过上述方式,你可以用Golang与Docker Compose轻松构建可复用的本地开发环境,把精力放在业务代码而不是环境折腾上。
GolangDocker_Compose开发环境修改时间:2026-07-30 11:27:25