Go语言——docker-compose部署etcd以及go使用其服务注册

发布于:2025-05-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、docker-compsoe.yml文件如下

version: "3.5"

services:
  etcd:
    hostname: etcd
    image: bitnami/etcd:latest
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    privileged: true
    volumes:
      # 持久化 etcd 数据到宿主机
      - "/app/apisix/etcd/data:/bitnami/etcd/data"
    environment:
      # 客户端广播地址
      - "ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379"
      # 客户端监听地址
      - "ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379"
      # 节点间通信地址
      - "ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380"
      - "ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380"
      
      # 设置初始集群信息
      - "ETCD_INITIAL_CLUSTER=node1=http://0.0.0.0:2380"
      - "ETCD_NAME=node1"
      - "ETCD_DATA_DIR=/opt/bitnami/etcd/data"

      # 👇 开启权限认证(必须配置密码)
      - "ETCD_AUTH_ENABLED=true"
      - "ETCD_ROOT_PASSWORD=123456"

    ports:
      - "2379:2379"   # 客户端通信端口
      - "2380:2380"   # 节点间通信端口

    networks:
      - etcdnet

networks:
  etcdnet:
    name: etcdnet

安装完成之后,进入容器中,使用如下命令,测试连接

etcdctl --user root:123456 endpoint health

二、go项目中安装依赖

go get go.etcd.io/etcd/client/v3
go get github.com/go-kratos/kratos/contrib/registry/etcd/v2

三、main.go中注册服务

func newApp(logger log.Logger, gs *grpc.Server, hs *http.Server) *kratos.App {
	client, err := clientv3.New(clientv3.Config{
		Endpoints: []string{"127.0.0.1:2379"},
	})
	reg := etcd.New(client)
	if err != nil {
		panic(err)
	}
	return kratos.New(
		kratos.ID(id),
		kratos.Name(Name),
		kratos.Version(Version),
		kratos.Metadata(map[string]string{}),
		kratos.Logger(logger),
		kratos.Server(
			gs,
			hs,
		),
		kratos.Registrar(reg),
	)
}

四、启动项目,成功之后,进入容器查看

etcdctl --user root:123456 endpoint health
## print: 127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.728868ms

网站公告

今日签到

点亮在社区的每一天
去签到