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