在 Go 语言中,可以使用 Docker API 来为容器设置健康检查。以下是一个示例代码:
package main
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
containerConfig := &types.ContainerConfig{
Image: "nginx",
Cmd: []string{"nginx", "-g", "daemon off;"},
}
hostConfig := &types.HostConfig{
PortBindings: nat.PortMap{
nat.Port("80/tcp"): {{HostIP: "", HostPort: "8080"}},
},
// 设置健康检查
Healthcheck: &types.HealthConfig{
Test: []string{"CMD-SHELL", "curl --fail http://localhost/ || exit 1"},
Interval: time.Duration(10) * time.Second,
Timeout: time.Duration(5) * time.Second,
Retries: 3,
},
}
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)
}
fmt.Println(resp.ID)
}
在上面的示例中,我们通过 types.HealthCheck 结构体设置了健康检查。具体来说,我们定义了一个 Test 字段,在其中指定了运行健康检查的命令(这里使用 curl 命令访问 localhost)。我们还设置了健康检查的间隔时间、超时时间和最大重试次数。
需要注意的是,在使用 Docker API 时需要具有足够的权限。如果没有正确的权限,可能会遇到一些问题。同时,在编写代码时应该注意安全性和可靠性等方面的问题。




