最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang遠(yuǎn)程操作docker api方式

 更新時間:2025年12月05日 10:22:03   作者:野豬佩擠  
文章介紹了Docker監(jiān)聽并處理三種socket形式的API請求:unix、tcp和fd,默認(rèn)情況下,Docker已經(jīng)開啟了unix socket,并且只有root用戶或docker用戶組成員才有權(quán)限訪問,用戶可以通過編輯docker守護(hù)進(jìn)程的配置文件,添加tcp參數(shù)來開放遠(yuǎn)程API訪問

golang遠(yuǎn)程操作docker api

Docker 可以監(jiān)聽并處理 3 種 socket 形式的 API 請求,分別是unix(unix 域協(xié)議)、tcp(tcp 協(xié)議)和fd。

一般來說,在安裝好 docker 后,默認(rèn)就已經(jīng)開啟了unix socket,并且我們在執(zhí)行需要有root權(quán)限或者docker用戶組成員才有權(quán)限訪問。例如:

curl --unix-socket /var/run/docker.sock  http://docker/version

添加遠(yuǎn)程 API 訪問接口

編輯 docker 守護(hù)進(jìn)程的配置文件/lib/systemd/system/docker.service,找到運(yùn)行主命令的那一行,其內(nèi)容大致為"ExecStart=/usr/bin/dockerd -H fd:// … "的那一行,給dockerd命令加參數(shù)-H tcp://0.0.0.0:2375,意思是在 2375 端口開放 API 訪問。

例如在我的設(shè)備上,配置文件相應(yīng)的那一行原本為

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

添加參數(shù)后變?yōu)?/p>

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375  --containerd=/run/containerd/containerd.sock

重新加載

systemctl daemon-reload          # 重新加載守護(hù)進(jìn)程配置
systemctl restart docker.service # 重啟 docker 服務(wù)

測試

comp@Linux system % docker -H tcp://192.168.64.7:2375 version
Client:
 Cloud integration: v1.0.22
 Version:           20.10.11
 API version:       1.41
 Go version:        go1.16.10
 Git commit:        dea9396
 Built:             Thu Nov 18 00:36:09 2021
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true

測試可以訪問

comp@Linux system % docker -H tcp://192.168.64.7:2375 images 
REPOSITORY       TAG       IMAGE ID       CREATED       SIZE
gossh            v01       fa111aaaec47   8 days ago    35.6MB
<none>           <none>    670ae487e585   8 days ago    35.6MB
nginx            latest    eeb9db34b331   8 days ago    134MB
httpd            latest    1c2ff9e4eb7d   2 weeks ago   136MB
arm64v8/alpine   latest    8e1d7573f448   6 weeks ago   5.33MB
alpine           latest    8e1d7573f448   6 weeks ago   5.33MB

go 獲取啟動的容器

package main

import (
	"context"
	"fmt"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

func main() {
	ctx := context.Background()
	//cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())

	cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation(),
		client.WithHost("tcp://192.168.64.7:2375"))
	if err != nil {
		panic(err)
	}

	containers, err := cli.ContainerList(ctx, types.ContainerListOptions{})
	if err != nil {
		panic(err)
	}

	for _, container := range containers {
		fmt.Println(container.Names, container.Image, container.Ports, container.Status,
			container.ImageID)

	}

}

啟動一個容器

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/client"
)

func main() {
	ctx := context.Background()
	cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation(),
		client.WithHost("tcp://192.168.64.7:2375"))
	//cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
	if err != nil {
		panic(err)
	}

	imageName := "httpd:latest"

	out, err := cli.ImagePull(ctx, imageName, types.ImagePullOptions{})
	if err != nil {
		panic(err)
	}
	defer out.Close()
	io.Copy(os.Stdout, out)

	resp, err := cli.ContainerCreate(ctx, &container.Config{
		Image: imageName,
	}, nil, nil, nil, "")
	if err != nil {
		panic(err)
	}

	if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
		panic(err)
	}

	fmt.Println(resp.ID)
}

拉取鏡像

package main

import (
	"context"
	"io"
	"os"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

func main() {
	ctx := context.Background()
	cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation(),
		client.WithHost("tcp://192.168.64.7:2375"))
	//cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
	if err != nil {
		panic(err)
	}

	out, err := cli.ImagePull(ctx, "httpd:latest", types.ImagePullOptions{})
	if err != nil {
		panic(err)
	}

	defer out.Close()

	io.Copy(os.Stdout, out)
}

官網(wǎng)參考

https://docs.docker.com/engine/api/sdk/examples/

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Go語言中空結(jié)構(gòu)體的慣用法

    詳解Go語言中空結(jié)構(gòu)體的慣用法

    空結(jié)構(gòu)體在 Go 編程中有著廣泛的應(yīng)用,本文將詳細(xì)探討空結(jié)構(gòu)體的幾種典型用法,并解釋為何它們在特定場景下非常有用,希望對大家有所幫助
    2024-11-11
  • golang 刪除切片的某個元素及剔除切片內(nèi)的零值方式

    golang 刪除切片的某個元素及剔除切片內(nèi)的零值方式

    這篇文章主要介紹了golang 刪除切片的某個元素及剔除切片內(nèi)的零值方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言中iota的具體使用

    Go語言中iota的具體使用

    Go語言中,iota是一個用于生成一系列相關(guān)常量值的常量生成器,常應(yīng)用于枚舉、位操作等場景,廣泛用于定義HTTP狀態(tài)碼、權(quán)限控制等,本文就來介紹一下iota的具體使用,感興趣的可以了解一下
    2024-11-11
  • Go語言循環(huán)遍歷含有中文的字符串的方法小結(jié)

    Go語言循環(huán)遍歷含有中文的字符串的方法小結(jié)

    這篇文章主要介紹了Go語言循環(huán)遍歷含有中文的字符串的幾種方法,文章通過代碼示例講解的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • Go語言中的Panic和Recover,從原理到實(shí)踐

    Go語言中的Panic和Recover,從原理到實(shí)踐

    本文詳細(xì)介紹了Go語言中的Panic和Recover機(jī)制,包括它們的基本概念、用法、最佳實(shí)踐以及實(shí)戰(zhàn)應(yīng)用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2026-04-04
  • 聊聊golang的defer的使用

    聊聊golang的defer的使用

    這篇文章主要介紹了聊聊golang的defer的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Go表達(dá)式引擎expr基礎(chǔ)用法實(shí)戰(zhàn)指南

    Go表達(dá)式引擎expr基礎(chǔ)用法實(shí)戰(zhàn)指南

    expr是一個高性能的 Go 表達(dá)式引擎,它允許你在代碼中安全地執(zhí)行動態(tài)生成的表達(dá)式,本文給大家介紹Go表達(dá)式引擎expr基礎(chǔ)用法實(shí)戰(zhàn)指南,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • golang中iota的用法小結(jié)

    golang中iota的用法小結(jié)

    iota是Go語言中的一個預(yù)定義標(biāo)識符,用于表示const聲明塊中每個常量的偏移值,本文主要介紹了golang中iota的用法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • golang快速實(shí)現(xiàn)網(wǎng)頁截圖的方法

    golang快速實(shí)現(xiàn)網(wǎng)頁截圖的方法

    這篇文章主要介紹了golang快速實(shí)現(xiàn)網(wǎng)頁截圖的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 一文帶你搞懂Go如何讀寫Excel文件

    一文帶你搞懂Go如何讀寫Excel文件

    Excelize是一個用純Go語言編寫的庫,提供了一組函數(shù),可以對XLAM?/?XLSM?/?XLSX?/?XLTM?/?XLTX文件進(jìn)行讀寫。支持讀寫由Microsoft?Excel?2007及以后版本生成的電子表格文檔。本文就將用它實(shí)現(xiàn)讀寫Excel文件操作,感興趣的可以學(xué)習(xí)一下
    2022-11-11

最新評論

射阳县| 乳山市| 基隆市| 钟山县| 兴仁县| 洪湖市| 成安县| 临泽县| 翁牛特旗| 西畴县| 游戏| 池州市| 宜兰县| 莲花县| 天柱县| 社旗县| 夏河县| 增城市| 石渠县| 会理县| 红安县| 和龙市| 舟山市| 盘山县| 赫章县| 嵊州市| 荆门市| 阜平县| 界首市| 广元市| 哈尔滨市| 赞皇县| 包头市| 常德市| 玛沁县| 阿拉善盟| 湘潭市| 三原县| 桓台县| 宁安市| 乌鲁木齐县|