Golang Docker SDK 创建容器并保持运行:使用 RestartPolicy
要让容器不会自动退出并一直运行,可以通过设置容器的 RestartPolicy 来实现。在使用 ContainerCreate 方法创建容器时,可以通过设置 HostConfig 的 RestartPolicy 字段来指定容器的重启策略。
以下是一个示例代码,展示如何使用 Golang Docker SDK 创建一个容器并让其一直运行:
package main
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
// 创建容器的配置
containerConfig := &types.ContainerCreateConfig{
Config: &types.ContainerConfig{
Image: "nginx:latest",
},
HostConfig: &types.HostConfig{
RestartPolicy: types.RestartPolicy{
Name: "always",
},
},
}
// 创建容器
resp, err := cli.ContainerCreate(context.Background(), containerConfig, nil, nil, "")
if err != nil {
panic(err)
}
// 启动容器
err = cli.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{})
if err != nil {
panic(err)
}
fmt.Println("容器已启动,ID:", resp.ID)
// 等待容器退出
statusCh, errCh := cli.ContainerWait(context.Background(), resp.ID, container.WaitConditionNotRunning)
select {
case err := <-errCh:
if err != nil {
panic(err)
}
case <-statusCh:
}
// 获取容器的状态
containerInfo, err := cli.ContainerInspect(context.Background(), resp.ID)
if err != nil {
panic(err)
}
fmt.Println("容器状态:", containerInfo.State.Status)
}
在上面的示例中,我们创建了一个 NGINX 容器,并设置了 RestartPolicy 为 always,表示容器将一直运行,即使容器发生异常退出也会自动重启。
原文地址: https://www.cveoy.top/t/topic/fMLS 著作权归作者所有。请勿转载和采集!