.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

状态是健康的

 

posted on 2024-04-29 16:13  是水饺不是水饺  阅读(30)  评论(0)    收藏  举报

导航