NikFaraday
@NikFaraday
Student full-stack Developer

Как развернуть MS Orleans в Docker?

Здравствуйте!

Есть asp.net core web api сервер (Микросервисы) и проект на Orleans. На данный момент мне нужно это всё развернуть в Dcoker. Скажу сразу, я не работал с Orleans и толком не понимаю что там и куда.

Я создал два Dockerfile (.api, .orleans). С билдом контейнеров проблем нету, Orleans запускается, даже curl http://localhost:8080 могу выполнить.

Проблема начинается с использованием Docker-compose. Вот так он выглядит:
services:
  orleans:
    build:
      context: .
      dockerfile: Dockerfile.orleans
    ports:
      - 7182:7182
  api:
    build:
      context: .
      dockerfile: Dockerfile.api
    ports:
      - 5001:5001


После запуска docker-compose build/up сначала запускается Orleans (Так и задумано), после чего API. На этом момент получается исключение:

api-1      |       Connection attempt to endpoint S127.0.0.1:30000:0 failed
api-1      |       Orleans.Networking.Shared.SocketConnectionException: Unable to connect to 127.0.0.1:30000. Error: ConnectionRefused
api-1      |          at Orleans.Networking.Shared.SocketConnectionFactory.ConnectAsync(EndPoint endpoint, CancellationToken cancellationToken) in /_/src/Orleans.Core/Networking/Shared/SocketConnectionFactory.cs:line 54
api-1      |          at Orleans.Runtime.Messaging.ConnectionFactory.ConnectAsync(SiloAddress address, CancellationToken cancellationToken) in /_/src/Orleans.Core/Networking/ConnectionFactory.cs:line 61
api-1      |          at Orleans.Runtime.Messaging.ConnectionManager.ConnectAsync(SiloAddress address, ConnectionEntry entry) in /_/src/Orleans.Core/Networking/ConnectionManager.cs:line 193


Конфигурация соединения между сервисами на стороне Orleans:
IHost host = new HostBuilder()
    .UseOrleans(siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("<DevStore>")
            .Configure<ClusterOptions>(options =>
            {
                options.ClusterId = "<Dev>";
                options.ServiceId = "<Quiz>";
            })
            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback);
    })
    // ...


На стороне asp.net web api:
var builder = WebApplication.CreateBuilder(args);

builder.Host
    .UseOrleansClient(client =>
    {
        client
            .UseLocalhostClustering()
            .Configure<ClusterOptions>(options =>
            {
                options.ClusterId = "<Dev>";
                options.ServiceId = "<Quiz>";
            });
    })
    .ConfigureLogging(logging => logging.AddConsole());


Суть в том, что сам сервер работает в Dev моде, т.е., при запуске того же дебага они нормально общаются, всё работает, никаких ошибок нет. Но я не могу развернуть ту же конфигурацию на Docker, потому что ругается на 127.0.0.1:30000 (В исключении). Кто не знаком, может поинтересоваться, где прописан этот адрес/порт? Он прописан как дефолтный порт в методе .UseLocalhostClustering():
6634969e4c245039143473.png
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
@den_labs
А у вас docker-compose полностью описан?
По идее сервисы должны быть в одной сетке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы