go docker sdk 第三章
容器数据卷操作
创建数据卷
本地创建一个数据卷myvolume,并将容器/root 目录与容器卷关联,命令行docker volume inspect myvolume
可查看本地数据卷存放位置
package containers_test
import (
"context"
"fmt"
"log"
"os"
"runtime"
"strconv"
"testing"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network"
"github.com/docker/docker/api/types/volume"
"github.com/docker/docker/client"
"github.com/docker/go-connections/nat"
)
var (
cli *client.Client
logger *log.Logger = log.New(os.Stdout, "", log.LUTC)
)
func Fatalln(a ...any) {
_, file, line, _ := runtime.Caller(1)
acopy := make([]any, len(a)+1)
acopy[0] = file + ":" + strconv.Itoa(line)
copy(acopy[1:], a)
logger.Println(acopy...)
os.Exit(0)
}
func init() {
var err error
cli, err = client.NewClientWithOpts(client.WithVersion("1.43"), client.WithHost("http://192.168.101.7:2999"))
if err != nil {
Fatalln(err)
}
}
const HOSTIP = "192.168.101.7"
func TestC3(t *testing.T) {
_, err := cli.VolumeCreate(context.Background(), volume.CreateOptions{Name: "myvolume"})
if err != nil {
Fatalln(err)
}
resp, err := cli.ContainerCreate(context.Background(), &container.Config{
Env: []string{"RABBITMQ_DEFAULT_USER=cho", "RABBITMQ_DEFAULT_PASS=123"}, Image: "rabbitmq:management"}, &container.HostConfig{
Binds: []string{"myvolume:/var/lib/rabbitmq:rw"},//rw 是读写模式,ro 是只读,wo是只写。第一个参数为上面创建的数据卷
PortBindings: nat.PortMap{
"5672": []nat.PortBinding{nat.PortBinding{HostIP: HOSTIP, HostPort: "5672"}},
"15672": []nat.PortBinding{nat.PortBinding{HostIP: HOSTIP, HostPort: "15672"}},
},
}, &network.NetworkingConfig{}, nil, "rabbitmq3")
if err != nil {
Fatalln(err)
}
fmt.Println("create container success " + resp.ID)
err = cli.ContainerStart(context.Background(), resp.ID, container.StartOptions{})
if err != nil {
Fatalln(err)
}
fmt.Println("start container success")
}
命令行执行go test -v c3_test.go
调试