亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Docker Golang SDK 中為 client.ImagePull() 禁用詳細標準輸出

在 Docker Golang SDK 中為 client.ImagePull() 禁用詳細標準輸出

Go
智慧大石 2022-07-11 15:09:18
使用 拉取圖像時ImagePull(),終端中有大量標準輸出顯示拉取進度,即;{"status":"Downloading","progressDetail":{"current":6433248,"total":7964517},"progress":"[========================================\u003e          ]  6.433MB/7.965MB","id":"ae5cee1a3f12"}func PullImage(imageName string) bool {    ctx := context.Background()    cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())    if err != nil {        log.Error(err)        return false    }    //TODO: Need to disable Stdout!!    log.Info("\t\tPulling image " + imageName)    out, err := cli.ImagePull(ctx, imageName, types.ImagePullOptions{})    if err != nil {        log.Error(err)        return false    }    defer out.Close()    io.Copy(os.Stdout, out)    log.Info("Pulled image " + imageName + " into host")    return true}我搜索了文檔,但沒有找到禁用 StdOut 或更改詳細程度的方法。我不太了解這io.Copy(os.Stdout, out)條線,但據我所知,禁用它會導致沒有圖像被拉出。我們如何隱藏輸出ImagePull()?
查看完整描述

1 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

我不太了解 io.Copy(os.Stdout, out) 行,但據我所知,禁用它會導致沒有圖像被拉出。


io.Copyio.Reader簡單地從一個(在本例io.ReadCloser中也是一個)中讀取所有數據io.Reader并將其寫入一個io.Writer.


我的理解是,如果您不執行此步驟,則main返回之前ImagePull有機會在后臺完成。


但是,如果您確實執行io.Copy了 ,則復制會保持main足夠長的時間以使拉取實際完成。


在上面評論中的示例中,我一直main忙于for/sleep循環。


你看到所有輸出的原因是因為......好吧,你將輸出復制ImagePull到Stdoutwith io.Copy(os.Stdout, out),所以我們ImagePull在 stdout 中看到輸出也就不足為奇了。


相反,如果我們將所有輸出復制到某個使輸出消失的“黑洞”中,我們會main在復制發生時保持忙碌,同時抑制其所有輸出。


一種方法是使用io/ioutil's ioutil.Discard。這是一個io.Writer簡單地丟棄所有寫入它的數據。


因此,只需將您io.Copy(os.Stdout, out)的行替換為以下內容:


import {

    "io/ioutil"

}


io.Copy(ioutil.Discard, out)


查看完整回答
反對 回復 2022-07-11
  • 1 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號