如何通过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
相关产品推荐
相关产品推荐

