要让容器不会自动退出并一直运行,可以通过设置容器的 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,表示容器将一直运行,即使容器发生异常退出也会自动重启。

Golang Docker SDK 创建容器并保持运行:使用 RestartPolicy

原文地址: https://www.cveoy.top/t/topic/fMLS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录