# Docker 模块
Air.Cloud.Modules.Docker 提供 Docker Engine 接入能力,并实现 Core 层的 IContainerEngineStandard。业务代码或上层模块可以通过该标准读取容器列表、检查容器状态,并对指定容器执行启动、停止操作。
该模块只负责 Docker Engine 访问,不负责创建容器、拉取镜像、生成 Compose 文件或执行业务健康检查。
# 安装
dotnet add package Air.Cloud.Modules.Docker --version 10.0.2
# 注册 Docker Engine 容器引擎
using Air.Cloud.Modules.Docker.Extensions;
builder.Services.AddDockerEngineContainerService(options =>
{
options.Enabled = true;
options.DockerSocketPath = "/var/run/docker.sock";
options.RequestTimeout = TimeSpan.FromSeconds(30);
options.StartTimeout = TimeSpan.FromSeconds(60);
options.StopTimeout = TimeSpan.FromSeconds(60);
options.StopGracePeriodSeconds = 15;
});
注册后,应用可以从 DI 中解析 Core 标准:
using Air.Cloud.Core.Standard.Container;
var containerEngine = app.Services.GetRequiredService<IContainerEngineStandard>();
# 容器化部署
容器化部署时,需要把宿主机 Docker Socket 显式挂载到应用容器:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
挂载 Docker Socket 后,应用具备控制宿主机 Docker 容器的能力。该配置只应出现在受信任的控制面服务中。
# 使用示例
using Air.Cloud.Core.Standard.Container;
var containerEngine = app.Services.GetRequiredService<IContainerEngineStandard>();
var containers = await containerEngine.ListAsync(includeStopped: true);
var container = await containerEngine.InspectAsync("air.account");
var start = await containerEngine.StartAsync("air.account");
var stop = await containerEngine.StopAsync("air.account");
ContainerEngineInstance 返回以下主要字段:
| 字段 | 说明 |
|---|---|
Id | 容器短 ID |
Name | 容器名称 |
Image | 镜像名称 |
Runtime | 运行时类型,Docker 模块固定为 Docker |
State | Docker 原始状态,例如 running、exited |
Status | Docker 状态描述 |
HealthStatus | Docker Healthcheck 状态;未配置 Healthcheck 时为空 |
IsRunning | 是否处于运行状态 |
IsAvailable | 是否运行且未被 Docker 标记为 unhealthy |
# 配置项
| 配置项 | 默认值 | 说明 |
|---|---|---|
Enabled | false | 是否启用 Docker Engine Socket 访问 |
DockerSocketPath | /var/run/docker.sock | Docker Engine Unix Socket 路径 |
RequestTimeout | 30s | 列表、检查等查询请求超时 |
StartTimeout | 60s | 启动容器请求超时 |
StopTimeout | 60s | 停止容器请求超时 |
StopGracePeriodSeconds | 15 | 停止容器时传递给 Docker 的优雅退出秒数 |
# 注意事项
Enabled默认关闭。未显式开启时,服务不会访问 Docker Engine。InspectAsync只读取 Docker Engine 状态,不访问业务 HTTP 端口。StartAsync和StopAsync只操作调用方传入的容器名称或 ID。- 当前实现面向 Linux Unix Socket 场景;Windows Docker named pipe 不在该实现范围内。
- 如果同一应用同时注册多个
IContainerEngineStandard实现,需要在应用侧明确最终使用哪个实现。