orleans icon indicating copy to clipboard operation
orleans copied to clipboard

[Question] How to connect Orleans Client to Orleans Server in Docker?

Open NikHusachenko opened this issue 9 months ago • 3 comments

I try to deploy Silo client and silo server on Docker via docker-compose, but I get error that silo client cannot connect to other container on port 30000. I set upped containers for talking, and I can send simple http request from first project to second and get response. But I can't run project using Orleans. This is code for client:

var builder = WebApplication.CreateBuilder(args);
builder.Host
    .UseOrleansClient(client =>
    {
        client
            .UseLocalhostClustering(30000)
            .Configure<ClusterOptions>(options =>
            {
                options.ClusterId = "<Dev>";
                options.ServiceId = "<Quiz>";
            })
            .Configure<EndpointOptions>(options =>
            {
                options.AdvertisedIPAddress = IPAddress.IPv6Loopback;
                options.GatewayPort = 30_000;
                options.SiloPort = 11_111;
            });
    })
    .ConfigureLogging(logging => logging.AddConsole());

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

Server code:

var builder = WebApplication.CreateBuilder(args);
builder.Host
    .UseOrleans(siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering(30000)
            .AddMemoryGrainStorage("<DevStore>")
            .Configure<ClusterOptions>(options =>
            {
                options.ClusterId = "<Dev>";
                options.ServiceId = "<Quiz>";
            })
            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
            .Configure<EndpointOptions>(options =>
            {
                options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Loopback, 11111);
                options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Loopback, 30000);
                options.AdvertisedIPAddress = IPAddress.Loopback;
                options.SiloPort = 11_111;
                options.GatewayPort = 30_000;
            });
    })
    .ConfigureLogging(logging => logging.AddConsole());

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

In the future I have to use UseRedisClustering instead a UseLocalhostClustering. This project successfully run in local PC, but in Docker I get exception ''Connection attempt to endpoint S127.0.0.1:30000:0 failed". This is Dockerfile.silo for server project:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base

WORKDIR /app
EXPOSE 5034
EXPOSE 11111
EXPOSE 30000

# ...

ENTRYPOINT ["dotnet", "DockerSilo.Orleans.dll", "--urls", "http://*:5034" ]

And Dockerfile for client project:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base

WORKDIR /app
EXPOSE 5131

# ...

ENTRYPOINT ["dotnet", "DockerSilo.Api.dll", "--urls", "http://*:5131"]

And docker-compose:

services:
  redis:
    image: redis
    ports:
      - 6379:6379

  api:
    build: 
      context: .
      dockerfile: Dockerfile.web
    ports:
      - 5131:5131
    networks:
      - siloNet

  silo:
    build: 
      context: .
      dockerfile: Dockerfile.silo
    ports:
      - 5034:5034
      - 11111:11111
      - 30000:30000
    networks:
      - siloNet

networks:
  siloNet:
    driver: bridge

As you are seen, all parts configured well, but I don't know why this doesn't work. Please, help me resolve this problem, because I did 250 container builds tries for last two days and can't solve this alone

NikHusachenko avatar May 08 '24 14:05 NikHusachenko