boltdb存储容器实例信息

    xiaoxiao2022-07-12  141

    package main import ( "fmt" "log" "strconv" "github.com/boltdb/bolt" docker "github.com/fsouza/go-dockerclient" ) func AddPid(db *bolt.DB, pid string, containerid string) error { err := db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("ContainerPid")) //往表里面存储数据 if b != nil { //插入的键值对数据类型必须是字节数组 err := b.Put([]byte(pid), []byte(containerid)) if err != nil { log.Fatal(err) } } return nil }) return err } func CheckPid(db *bolt.DB, pid string) (string, error) { var flag string err := db.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("ContainerPid")) if b != nil { data := b.Get([]byte(pid)) fmt.Println(string(data)) if len(data) > 0 { flag = "yes" } // fmt.Println(flag) } return nil }) // fmt.Println(flag) return flag, err } func main() { //container client, err := docker.NewClient("unix:///var/run/docker.sock") if err != nil { log.Fatal(err) } info, err := client.ListContainers(docker.ListContainersOptions{All: true}) if err != nil { log.Fatal(err) } //boltdb db, err := bolt.Open("my.db", 0600, nil) if err != nil { log.Fatal(err) } defer db.Close() err = db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("ContainerPid")) if b == nil { _, err := tx.CreateBucket([]byte("ContainerPid")) if err != nil { log.Fatal(err) } } return nil }) if err != nil { log.Fatal(err) } //container for _, co := range info { dinfo, err := client.InspectContainer(co.ID[0:12]) if err != nil { log.Fatal(err) } fmt.Println(string(co.ID[0:12]), strconv.Itoa(dinfo.State.Pid)) xxx := AddPid(db, strconv.Itoa(dinfo.State.Pid), string(co.ID[0:12])) if xxx != nil { log.Fatal(err) } } x, err := CheckPid(db, "7048") if err != nil { log.Fatal(err) } fmt.Println(x) }

    参考

    https://github.com/zupzup/boltdb-example/blob/master/main.go
    最新回复(0)