Golang Docker SDK 设置容器持续运行 (不退出)
要设置容器创建后一直运行,不会退出,可以通过设置容器的 RestartPolicy 属性为 'always' 来实现。
以下是使用 Golang Docker SDK 设置容器创建后一直运行的示例代码:
package main
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/docker/docker/pkg/stdcopy"
"io"
"os"
)
func main() {
// 创建docker客户端
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
// 创建容器
resp, err := cli.ContainerCreate(context.Background(), &types.ContainerConfig{
Image: "nginx:latest",
Tty: true,
AttachStdout: true,
AttachStderr: true,
RestartPolicy: types.RestartPolicy{
Name: "always",
},
}, nil, nil, "")
if err != nil {
panic(err)
}
// 启动容器
err = cli.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{})
if err != nil {
panic(err)
}
// 获取容器日志
out, err := cli.ContainerLogs(context.Background(), resp.ID, types.ContainerLogsOptions{
ShowStdout: true,
ShowStderr: true,
Follow: true,
})
if err != nil {
panic(err)
}
// 输出日志到控制台
_, err = stdcopy.StdCopy(os.Stdout, os.Stderr, out)
if err != nil && err != io.EOF {
panic(err)
}
// 等待容器退出
_, err = cli.ContainerWait(context.Background(), resp.ID)
if err != nil {
panic(err)
}
fmt.Println("容器已退出")
}
在上述示例代码中,首先使用 client.NewClientWithOpts 创建 docker 客户端。然后使用 cli.ContainerCreate 创建容器,并设置容器配置的 RestartPolicy 属性为 'always'。接着使用 cli.ContainerStart 启动容器。然后使用 cli.ContainerLogs 获取容器的日志,并通过 stdcopy.StdCopy 将日志输出到控制台。最后使用 cli.ContainerWait 等待容器退出。
注意:以上示例代码假设你已经安装了 docker 和 docker sdk,并且已经导入了相关的包。
原文地址: https://www.cveoy.top/t/topic/fMIb 著作权归作者所有。请勿转载和采集!