要让容器不会自动退出并一直运行,可以通过在创建容器时指定一个持久化进程来实现。以下是使用 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)
	}

	// 创建容器
	resp, err := cli.ContainerCreate(context.Background(), &types.ContainerConfig{
		Image:        "ubuntu",
		Cmd:          []string{"sh", "-c", "while true; do sleep 1; done"},
		Tty:          true,
		AttachStdout: true,
		AttachStderr: true,
	}, nil, nil, "")
	if err != nil {
		panic(err)
	}

	// 启动容器
	err = cli.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{})
	if err != nil {
		panic(err)
	}

	fmt.Println("容器已启动,按任意键退出...")
	fmt.Scanln()

	// 停止容器
	err = cli.ContainerStop(context.Background(), resp.ID, nil)
	if err != nil {
		panic(err)
	}
}

上述示例中,我们创建了一个持续运行的容器,它会无限循环执行 sleep 1 命令。你可以根据实际需求修改 Cmd 字段来指定容器中的持久化进程。

在启动容器后,程序会等待用户输入任意键,然后停止容器。这样可以保证容器在运行期间不会自动退出。

请注意,这只是一个简单示例,实际使用时可能需要根据具体需求进行适当的修改和扩展。

Golang Docker SDK: 如何让创建的容器一直运行不退出

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

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