我想运行下面的docker命令docker run ajaycs14/hello-world -p 1527:80 -d
。
如何使用Docker Go SDK实现上述功能?
下面是运行图片的示例代码,来自官方文档,如何修改下面的代码以获取端口和分离模式等选项。请帮助我修改下面的代码为上述命令(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)
}
1条答案
按热度按时间ztigrdn81#
在
ContainerCreate
方法中,第三个参数是您需要使用的HostConfig。如果你对设置端口感兴趣,那么你应该看看PortBindings
字段。您还需要为容器指定暴露的端口。您可以通过在容器配置中提供ExposedPorts
(第二个参数)来实现这一点。我假设你的容器将默认以
daemon
模式启动,因为你使用的是API而不是cli
工具。下面是一个工作示例:
在
docker ps --all
的输出中,我可以看到我的端口:PORTS 127.0.0.1:8080->8080/tcp, 27017/tcp