要设置容器创建后一直运行,不会退出,可以通过设置容器的 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 著作权归作者所有。请勿转载和采集!

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