在 Go 语言中,我们可以使用 Docker API 来设置容器的资源配额。以下是一个示例代码:
package main
import (
"context"
"fmt"
"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)
if err != nil {
panic(err)
}
containerConfig := &container.Config{
Image: "nginx",
}
hostConfig := &container.HostConfig{
// 设置 CPU 配额
CpuQuota: int64(100000),
// 设置内存限制
Memory: int64(536870912),
}
resp, err := cli.ContainerCreate(ctx, containerConfig, hostConfig, nil, "")
if err != nil {
panic(err)
}
if err = cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
panic(err)
}
inspectResp, _ ,err := cli.ContainerInspectWithRaw(ctx, resp.ID)
if err != nil {
panic(err)
}
fmt.Println("cpu quota:", inspectResp.HostConfig.Resources.CPUQuota)
fmt.Println("memory limit:", inspectResp.HostConfig.Resources.Memory)
}
在上面的示例中,我们通过 HostConfig 结构体来定义了容器的资源配额。其中,CpuQuota 字段表示 CPU 配额,单位为微秒(1/1000 毫秒),而 Memory 字段则表示内存限制,单位为字节。
在实际应用中,我们可以根据需要设置不同的资源配额以满足业务需求。值得注意的是,在使用资源配额功能时要确保目标容器支持该功能,并且正确配置监控参数才能够发挥最大效益。




