同步操作将从 mirrors_back/docker-cli 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package containerimport ("context""fmt""os"gosignal "os/signal""runtime""time""github.com/docker/cli/cli/command""github.com/docker/docker/api/types/container""github.com/docker/docker/client""github.com/moby/sys/signal""github.com/sirupsen/logrus")// resizeTtyTo resizes tty to specific height and widthfunc resizeTtyTo(ctx context.Context, apiClient client.ContainerAPIClient, id string, height, width uint, isExec bool) error {if height == 0 && width == 0 {return nil}options := container.ResizeOptions{Height: height,Width: width,}var err errorif isExec {err = apiClient.ContainerExecResize(ctx, id, options)} else {err = apiClient.ContainerResize(ctx, id, options)}if err != nil {logrus.Debugf("Error resize: %s\r", err)}return err}// resizeTty is to resize the tty with cli out's tty sizefunc resizeTty(ctx context.Context, cli command.Cli, id string, isExec bool) error {height, width := cli.Out().GetTtySize()return resizeTtyTo(ctx, cli.Client(), id, height, width, isExec)}// initTtySize is to init the tty's size to the same as the window, if there is an error, it will retry 10 times.func initTtySize(ctx context.Context, cli command.Cli, id string, isExec bool, resizeTtyFunc func(ctx context.Context, cli command.Cli, id string, isExec bool) error) {rttyFunc := resizeTtyFuncif rttyFunc == nil {rttyFunc = resizeTty}if err := rttyFunc(ctx, cli, id, isExec); err != nil {go func() {var err errorfor retry := 0; retry < 10; retry++ {time.Sleep(time.Duration(retry+1) * 10 * time.Millisecond)if err = rttyFunc(ctx, cli, id, isExec); err == nil {break}}if err != nil {fmt.Fprintln(cli.Err(), "failed to resize tty, using default size")}}()}}// MonitorTtySize updates the container tty size when the terminal tty changes sizefunc MonitorTtySize(ctx context.Context, cli command.Cli, id string, isExec bool) error {initTtySize(ctx, cli, id, isExec, resizeTty)if runtime.GOOS == "windows" {go func() {prevH, prevW := cli.Out().GetTtySize()for {time.Sleep(time.Millisecond * 250)h, w := cli.Out().GetTtySize()if prevW != w || prevH != h {resizeTty(ctx, cli, id, isExec)}prevH = hprevW = w}}()} else {sigchan := make(chan os.Signal, 1)gosignal.Notify(sigchan, signal.SIGWINCH)go func() {for range sigchan {resizeTty(ctx, cli, id, isExec)}}()}return nil}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。