如何使用Go Sdk为docker运行docker run?

时间:2017-08-01 05:00:53

标签: docker go

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

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

运行图像的示例代码如下,从官方文档中,如何修改下面的代码以获取端口和分离模式等选项。请帮我修改下面的代码以适用于上述命令({{1} })?

docker run ajaycs14/hello-world -p 1527:80 -d

1 个答案:

答案 0 :(得分:3)

在方法ContainerCreate中,您需要使用第三个参数HostConfig。如果您对设置端口感兴趣,那么您应该查看PortBindings字段。您还需要为容器指定公开的端口。您可以将ExposedPorts提供给container 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