You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Docker SDK for Go以分离模式启动容器?dockerd端点实现疑问

问题解答

1. 是否可以通过Docker SDK for Go以分离模式启动容器?

可以,而且Docker SDK for Go启动容器默认就是分离模式,容器会在后台运行,不会阻塞当前进程。

以下是简单的示例代码:

package main

import (
	"context"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
)

func main() {
	ctx := context.Background()
	// 初始化Docker客户端
	cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
	if err != nil {
		panic(err)
	}
	defer cli.Close()

	// 创建Nginx容器
	createResp, err := cli.ContainerCreate(ctx, &types.ContainerConfig{
		Image: "nginx:alpine",
	}, nil, nil, nil, "my-nginx")
	if err != nil {
		panic(err)
	}

	// 启动容器(默认分离模式,后台运行)
	if err := cli.ContainerStart(ctx, createResp.ID, types.ContainerStartOptions{}); err != nil {
		panic(err)
	}
}

如果需要附加到容器的标准输入/输出/错误流,才需要额外调用ContainerAttach方法,或者在创建容器时配置AttachStdin、AttachStdout等参数。

2. 开发类Docker SDK时,如何以分离模式触发dockerd的/containers/{id}/start端点,detachKeys参数的用法?

首先明确:/containers/{id}/start API默认就是以分离模式启动容器,不需要额外参数。detachKeys的作用不是控制启动模式,而是自定义从附加的容器会话中分离的快捷键。

detachKeys的具体用法:

当你通过/containers/{id}/attach API附加到容器的流时,默认的分离快捷键是Ctrl+P,Ctrl+Q。你可以通过在/containers/{id}/start或/containers/{id}/attach的请求体中传入detachKeys参数,自定义这个快捷键组合。

参数格式要求:

  • 可以是单个按键(如ctrl-c),也可以是多按键组合(用逗号分隔,如ctrl-x,ctrl-y)
  • 支持的修饰键:ctrl、shift、alt
  • 支持的普通键:字母、数字、space、tab、esc等特殊字符

示例请求(POST /containers/{id}/start,JSON请求体):

{
  "detachKeys": "ctrl-x,ctrl-y"
}

设置后,当你附加到容器会话时,按下Ctrl+X再按Ctrl+Y,就可以从会话中分离,回到本地终端,而容器仍会继续运行。

内容的提问来源于stack exchange,提问作者Fulvio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:10:21