首页 > 其他分享 >go通过docker sdk进入容器执行命令

go通过docker sdk进入容器执行命令

时间:2023-07-19 14:56:04浏览次数:36  
标签:容器 err fmt client go docker Docker sdk

代码部分

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

相关文章

  • docker部署mysql服务
    1:拉取镜像dockerpullmysql2:验证拉镜像成功dockerimages3:创建目录mkdir-p/mysql/data/mysql/logs/mysql/confcd/mysql/conftouchmy.cnf4:创建运行容器dockerrun-p3306:3306--namemysql-v/mysql/conf:/etc/mysql/conf.d-v/mysql/logs:/logs-v/mysql......
  • docker安装mariadb
    第一次使用云服务器,发现存在权限问题。添加一个docker用户组将用户加入docker组刷新docker组拉取镜像查看镜像启动容器查看容器......
  • go语言操作docker删除容器
    代码部分packagemainimport( "context" "fmt" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/client")funcmain(){ //设置远程Docker守护进程的地址 remoteDockerURL:="tcp://10.0.0.1......
  • go语言操作docker重启容器
    代码部分packagemainimport( "context" "fmt" "os" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client")funcmain(){ //设置远程Docker守护进程的地址 remoteDockerURL:="tcp:......
  • Django-4.2博客开发教程:需求分析并确定数据表(四)
    前三步已经完成了一个初步流程,从创建项目》应用》数据迁移》访问首页。以下是我整理的基本流程,接下来一步一步完成整个项目。 1.我们的需求: 博客的功能主要分为:网站首页、文章分类、文章内容、图片、文章推荐、文章排行、热门推荐、文章搜索 等~1、网站首页:首页是整个网站......
  • 关于go语言常量的那些事
    相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。常量的声明和变量声明非常类似,只是把var换成了const,常量在定义的时候必须赋值。const常量名[数据类型]=value项目实战常见场景数据类型可以忽略不写,Golang编译器会⾃动推断出数据类型。在使⽤......
  • Django路由分发
    1.简单的项目不需要路由分发,直接在根路径下的url.py编写即可2.路由分发利用上期学过的在apps文件夹下创建多apphttps://www.cnblogs.com/khalil12138/p/17540805.html  再将路由拆分到各自app的urls.py下 ......
  • docker run -itd
    实现“dockerrun-itd”步骤及代码解析1.简介在开始教你如何实现“dockerrun-itd”之前,首先我们需要了解一些相关的背景知识。Docker是一种轻量级的容器化技术,可以快速创建、部署和运行应用程序。通过使用Docker,我们可以将应用程序及其依赖项打包成一个独立的容器,这样就可以......
  • docker run -d --name bitwarden -v /bw-data/:/data/ -p 8800:80 bitwardenrs/se
    DockerRun命令实现Bitwarden容器化引言在现代软件开发和部署中,容器化技术正变得越来越流行。Docker是一个用于构建、发布和运行应用程序的开源平台,它可以将应用程序及其依赖项打包到一个容器中,提供了一种轻便、可移植和可扩展的方式来部署应用程序。在本文中,我们将学习如何使用......
  • docker rm后 映射文件还能找回来吗
    Docker删除容器后如何找回映射文件简介在使用Docker时,我们可能会遇到删除容器后需要找回映射文件的情况。本文将指导您如何通过一系列步骤来实现这一目标。首先,我们先来了解整个流程。流程图下面的流程图展示了整个过程:+-------------------+|开发环境中的文件|+--------......