skip to Main Content

I have a project that is already using docker and docker compose
my problem is that when I start the project using docker compose, Aspire does not log anything, but when I start the project using dotnet run, its working.

here is my docker compose

services:
  sinamn75api:
    image: sinamn75api
    build: .
    ports:
      - "8090:80"
      - "8091:443"
    environment:
      ASPNETCORE_ENVIRONMENT: "Development"
      ASPNETCORE_URLS: "https://+:443;http://+:80"
      ASPNETCORE_Kestrel__Certificates__Default__Password: "BetterSoft1234"
      ASPNETCORE_Kestrel__Certificates__Default__Path: "/https/sinamn75api.pfx"
      OTEL_EXPORTER_OTLP_ENDPOINT=http://sinamn75api.dashboard:18889:
    volumes:
      - ~/.aspnet/https:/https:ro
      - ./SinaMN75Api/wwwroot:/app/wwwroot
    
  sinamn75api.redis:
    image: redis:latest
    restart: always
    ports:
      - '6379:6379'
    
  sinamn75api.dashboard:
    image: mcr.microsoft.com/dotnet/aspire-dashboard:latest
    container_name: dashboard
    ports:
      - "18888:18888"
      - "18889:18889"
    networks:
      - open

networks:
  open:

here is my docker

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["SinaMN75Api/SinaMN75Api.csproj", "SinaMN75Api/"]
COPY ["Utilities_aspnet/Utilities_aspnet.csproj", "Utilities_aspnet/"]
RUN dotnet restore "SinaMN75Api/SinaMN75Api.csproj" --disable-parallel
COPY . .
WORKDIR "/src/SinaMN75Api"
RUN dotnet build "SinaMN75Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "SinaMN75Api.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SinaMN75Api.dll"]

and here is my OpenTelemetry setup:

builder.Services.AddOpenTelemetry()
    .ConfigureResource(res => res.AddService("SinaMN75Api"))
    .WithMetrics(meter => {
        meter.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation();
        meter.AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:18889"));
    })
    .WithTracing(t => {
        t.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddEntityFrameworkCoreInstrumentation();
        t.AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:18889"));
    });

builder.Logging.AddOpenTelemetry(o => {
    o.AddConsoleExporter().SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("SinaMN75Api"));
    o.AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:18889"));
});

2

Answers


  1. Chosen as BEST ANSWER

    I found the problem, I was using networks for my aspire image but not for other images

    so the compose file should be like this

    services:
      sinamn75api:
        image: sinamn75api
        build: .
        ports:
          - "8090:80"
          - "8091:443"
        environment:
          ASPNETCORE_ENVIRONMENT: "Development"
          ASPNETCORE_URLS: "https://+:443;http://+:80"
          ASPNETCORE_Kestrel__Certificates__Default__Password: "BetterSoft1234"
          ASPNETCORE_Kestrel__Certificates__Default__Path: "/https/sinamn75api.pfx"
          OTEL_EXPORTER_OTLP_ENDPOINT=http://sinamn75api.dashboard:18889:
        volumes:
          - ~/.aspnet/https:/https:ro
          - ./SinaMN75Api/wwwroot:/app/wwwroot
        networks:
          - otel
        
      sinamn75api.redis:
        image: redis:latest
        restart: always
        ports:
          - '6379:6379'
        networks:
          - otel
        
      sinamn75api.dashboard:
        image: mcr.microsoft.com/dotnet/aspire-dashboard:latest
        container_name: dashboard
        ports:
          - "18888:18888"
        networks:
          - otel
    
    networks:
      otel:
    

  2. By default, the Aspire dashboard requires authentication on the ingest endpoint.

    If you add this environment variable to the Aspire container, it should work.

          - DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS=true
    

    In addition, you’re using an OTEL_EXPORTER_OTLP_ENDPOINT, but then overriding it with .AddOtlpExporter() by adding a URI in there.

    (also remove the trailing colon in the OTEL_EXPORTER_OTLP_ENDPOINT)

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search