如何运行docker运行使用Go Sdk的docker?

我想运行下面的docker run ajaycs14/hello-world -p 1527:80 -d命令docker run ajaycs14/hello-world -p 1527:80 -d

如何使用Docker Go SDK实现上述function?

运行映像的示例代码如下,从官方文档中,如何修改下面的代码,以端口和分离模式等选项。请帮助我修改以下代码工作以上命令( docker run ajaycs14/hello-world -p 1527:80 -d )?

 package main import ( "fmt" "io" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "golang.org/x/net/context" ) func main() { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) } imageName := "bfirsh/reticulate-splines" out, err := cli.ImagePull(ctx, imageName, types.ImagePullOptions{}) if err != nil { panic(err) } io.Copy(os.Stdout, out) resp, err := cli.ContainerCreate(ctx, &container.Config{ Image: imageName, }, nil, nil, "") if err != nil { panic(err) } if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { panic(err) } fmt.Println(resp.ID) } 

ContainerCreate方法中,第三个参数是您需要使用的HostConfig 。 如果你有兴趣设置端口,那么你应该看看PortBindings字段。 你也需要指定容器的暴露端口。 您可以通过将ExposedPorts提供给容器configuration (第二个参数)来完成此操作。
而且我认为你的容器默认会以daemon模式启动,因为你使用的是API而不是cli工具。

这是一个工作的例子:

 package main import ( "context" "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() { cli, err := client.NewEnvClient() if err != nil { panic(err) } ctx := context.Background() resp, err := cli.ContainerCreate(ctx, &container.Config{ Image: "mongo", ExposedPorts: nat.PortSet{"8080": struct{}{}}, }, &container.HostConfig{ PortBindings: map[nat.Port][]nat.PortBinding{nat.Port("8080"): {{HostIP: "127.0.0.1", HostPort: "8080"}}}, }, nil, "mongo-go-cli") if err != nil { panic(err) } if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { panic(err) } } 

并在docker ps --all输出 – 我可以看到我的端口: PORTS 127.0.0.1:8080->8080/tcp, 27017/tcp