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
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
By default, the Aspire dashboard requires authentication on the ingest endpoint.
If you add this environment variable to the Aspire container, it should work.
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)