.net core docker-compose 发布 (二) 设置 docker-compose 健康检查
上一篇介绍了简单发布 这篇介绍 docker-compose 编排健康检查
主要都写到这里了
docker-compose.override.yml
version: '3.4'
services:
testdockerwebapi:
env_file: .env
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=8080
- MyName=${MY_NAME}
ports:
- "8911:8080"
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/self"]
interval: 30s
timeout: 1m
retries: 3
start_period: 40s
dockerfile 有修改 因容器中没有curl命令 所以需要dockerfile文件中增加安装curl命令
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
COPY . /apiweb
WORKDIR /apiweb
EXPOSE 8080
EXPOSE 8081
ENTRYPOINT ["dotnet", "TestDockerWebAPI.dll"]
RUN apt-get update && apt-get install -y curl
//代码有修改
using Microsoft.Extensions.Diagnostics.HealthChecks;
using TestDockerWebAPI;
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using HealthChecks.UI.Client;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureAppConfiguration(config =>
{
config.AddEnvironmentVariables();
});
// Add services to the container.
builder.Services.Configure<TestSettings>(builder.Configuration);
builder.Services.AddControllers();
builder.Services.AddHealthChecks().AddCheck("self", check => HealthCheckResult.Healthy(),
tags: new string[] {
"self"
});
builder.Services.AddHealthChecksUI().AddInMemoryStorage();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//app.UseHttpsRedirection();
app.UseHealthChecksUI(setup: setup =>
{
setup.UIPath = "/health-ui";
});
app.UseHealthChecks("/healthz", new HealthCheckOptions
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
app.UseHealthChecks("/self", new HealthCheckOptions
{
Predicate = x => x.Name.Contains("self"),
// ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
app.UseAuthorization();
app.MapControllers();
app.Run();
编译之后拷贝到liunx中
编排 docker-compose up -d
移除 docker-compose down
查看状态 docker-compose ps
状态是健康的

浙公网安备 33010602011771号