2023-11-16 16:58:47 +08:00
# Docker Autoheal
2025-07-03 11:40:55 +08:00
监控并重启不健康的 Docker 容器。此功能曾提议在增加 \``HEALTHCHECK` \` 后包含进来,但最终未能实现。此容器是一个临时替代品,直到有原生支持 \``--exit-on-unhealthy` \`[https://github.com/docker/docker/pull/22719 ](https://github.com/docker/docker/pull/22719 )。
2023-11-16 16:58:47 +08:00
2025-07-03 11:40:55 +08:00
## 支持的标签和 Dockerfile 链接
* [`latest` (*Dockerfile*) ](https://github.com/willfarrell/docker-autoheal/blob/main/Dockerfile ) - 每日构建
* [`1.1.0` (*Dockerfile*) ](https://github.com/willfarrell/docker-autoheal/blob/1.1.0/Dockerfile )
* [`v0.7.0` (*Dockerfile*) ](https://github.com/willfarrell/docker-autoheal/blob/v0.7.0/Dockerfile )
2023-11-16 16:58:47 +08:00
 [](http://microbadger.com/images/willfarrell/autoheal "Docker layer breakdown")
2025-07-03 11:40:55 +08:00
## 如何使用
### UNIX 套接字透传
2023-11-16 16:58:47 +08:00
```bash
docker run -d \
--name autoheal \
--restart=always \
-e AUTOHEAL_CONTAINER_LABEL=all \
-v /var/run/docker.sock:/var/run/docker.sock \
willfarrell/autoheal
```
2025-07-03 11:40:55 +08:00
2023-11-16 16:58:47 +08:00
### TCP socket
2025-07-03 11:40:55 +08:00
2023-11-16 16:58:47 +08:00
```bash
docker run -d \
--name autoheal \
--restart=always \
-e AUTOHEAL_CONTAINER_LABEL=all \
-e DOCKER_SOCK=tcp://HOST:PORT \
-v /path/to/certs/:/certs/:ro \
willfarrell/autoheal
```
2025-07-03 11:40:55 +08:00
a) 在你的容器上应用标签 \``autoheal=true` \` 以使其被监控。
b) 设置环境变量 \``AUTOHEAL_CONTAINER_LABEL=all` \` 以监控所有运行中的容器。
2023-11-16 16:58:47 +08:00
2025-07-03 11:40:55 +08:00
c) 设置环境变量 \``AUTOHEAL_CONTAINER_LABEL` \` 为具有值 \``true` \` 的现有标签名称。
2023-11-16 16:58:47 +08:00
2025-07-03 11:40:55 +08:00
注意:您必须首先将 `HEALTHCHECK` 应用于您的 Docker 镜像。详情请参阅 [https://docs.docker.com/engine/reference/builder/#healthcheck ](https://docs.docker.com/engine/reference/builder/#healthcheck )。有关如何使用 mTLS 配置 TCP, 请参阅 [https://docs.docker.com/engine/security/https/ ](https://docs.docker.com/engine/security/https/ )。
2023-11-16 16:58:47 +08:00
2025-07-03 11:40:55 +08:00
证书和密钥需要以下名称:
* ca.pem
* client-cert.pem
* client-key.pem
### 更改时区
如果需要时区与本地机器一致,可以将 `/etc/localtime` 映射到容器中。
2023-11-16 16:58:47 +08:00
```
docker run ... -v /etc/localtime:/etc/localtime:ro
```
2025-07-03 11:40:55 +08:00
## ENV 默认设置
2023-11-16 16:58:47 +08:00
```
AUTOHEAL_CONTAINER_LABEL=autoheal
AUTOHEAL_INTERVAL=5 # check every 5 seconds
AUTOHEAL_START_PERIOD=0 # wait 0 seconds before first health check
AUTOHEAL_DEFAULT_STOP_TIMEOUT=10 # Docker waits max 10 seconds (the Docker default) for a container to stop before killing during restarts (container overridable via label, see below)
DOCKER_SOCK=/var/run/docker.sock # Unix socket for curl requests to Docker API
CURL_TIMEOUT=30 # --max-time seconds for curl requests to Docker API
WEBHOOK_URL="" # post message to the webhook if a container was restarted (or restart failed)
```
2025-07-03 11:40:55 +08:00
### 可选容器标签
2023-11-16 16:58:47 +08:00
```
autoheal.stop.timeout=20 # Per containers override for stop timeout seconds during restart
```
2025-07-03 11:40:55 +08:00
## 测试
2023-11-16 16:58:47 +08:00
```bash
docker build -t autoheal .
docker run -d \
-e AUTOHEAL_CONTAINER_LABEL=all \
-v /var/run/docker.sock:/var/run/docker.sock \
autoheal
```