go get github.com/docker/docker/client
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)
	}

}