代码部分
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
// 设置远程Docker守护进程的地址
remoteDockerURL := "tcp://10.0.0.12:2376" // 将remote-docker-host替换为远程Docker守护进程的IP地址或域名
// 创建Docker客户端,并指定远程Docker守护进程地址
cli, err := client.NewClientWithOpts(
client.WithHost(remoteDockerURL),
// client.WithVersion("1.41"),
client.WithAPIVersionNegotiation(),
)
if err != nil {
fmt.Println("创建docker客户端失败:", err)
os.Exit(1)
}
// 要进入的容器ID
containerID := "httpbin"
// 容器执行命令的配置
execConfig := types.ExecConfig{
Cmd: []string{"ls", "-l"}, // 要执行的命令及其参数
AttachStdout: true, // 指定是否将标准输出附加到当前进程的stdout
AttachStderr: true, // 指定是否将标准错误附加到当前进程的stderr
Tty: false, // 指定是否为执行分配一个tty
}
// 创建容器执行命令
execID, err := cli.ContainerExecCreate(context.Background(), containerID, execConfig)
if err != nil {
fmt.Println("Failed to create exec command:", err)
return
}
// 执行容器命令并获取输出
resp, err := cli.ContainerExecAttach(context.Background(), execID.ID, types.ExecStartCheck{})
if err != nil {
fmt.Println("Failed to attach to exec command:", err)
return
}
defer resp.Close()
// 将容器命令的输出复制到当前进程的stdout
_, err = io.Copy(os.Stdout, resp.Reader)
if err != nil {
fmt.Println("Failed to copy output:", err)
return
}
// 关闭Docker客户端连接
defer cli.Close()
}
标签:容器,err,fmt,client,go,docker,Docker,sdk
From: https://www.cnblogs.com/guangdelw/p/17565559.html