1、下载go的docker客户端
go get github.com/docker/docker/client
2、docker拉取镜像
docker run -p 27018:27018 mongo:4.4
3、golang代码运行 mongo:4.4
package main
import (
"context"
"fmt"
"time"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/docker/go-connections/nat"
)
func main() {
//创建一个本机docker客户端
c, err := client.NewEnvClient()
if err != nil {
panic(err)
}
ctx := context.Background()
resp, err := c.ContainerCreate(ctx, &container.Config{
Image: "mongo:4.4",
ExposedPorts: nat.PortSet{
"27017/tcp": {},
},
}, &container.HostConfig{
PortBindings: nat.PortMap{
"27017/tcp": []nat.PortBinding{
{
HostIP: "127.0.0.1",
HostPort: "0", //值为0表示任意找一个空闲的端口 //HostPort: "27018",
},
},
},
}, nil, nil, "")
if err != nil {
panic(err)
}
//运行
err = c.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{})
if err != nil {
panic(err)
}
//打印程序选择了本机哪个端口去隐射到mongo中
inspRes, err := c.ContainerInspect(ctx, resp.ID)
if err != nil {
panic(err)
}
fmt.Printf("listening as %+v\n", inspRes.NetworkSettings.Ports["27017/tcp"][0].HostPort)
fmt.Println("container started")
time.Sleep(5 * time.Second)
fmt.Println("killing container")
//删除container
err = c.ContainerRemove(ctx, resp.ID, types.ContainerRemoveOptions{
Force: true,
})
if err != nil {
panic(err)
}
}