Как развернуть MS Orleans в Docker?
Есть asp.net core web api сервер (Микросервисы) и проект на Orleans. На данный момент мне нужно это всё развернуть в Dcoker. Скажу сразу, я не работал с Orleans и толком не понимаю что там и куда.
Я создал два Dockerfile (.api, .orleans). С билдом контейнеров проблем нету, Orleans запускается, даже curl http://localhost:8080 могу выполнить.
Проблема начинается с использованием Docker-compose
. Вот так он выглядит:
services:
api:
build:
context: .
dockerfile: Dockerfile.api
ports:
- 5001:5001
networks:
- siloNet
silo:
build:
context: .
dockerfile: Dockerfile.orleans
ports:
- 7182:7182
- 30000:30000
networks:
- siloNet
networks:
siloNet:
driver: bridge
После запуска 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 .AddMemoryGrainStorage("DevStoreName") .Configure(options => { options.ClusterId = "ClusterIdName"; options.ServiceId = "ServiceIdName"; }) .UseLocalhostClustering() .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback); }) .ConfigureServices(services => { // ... }) .ConfigureLogging(logging => logging.AddConsole()) .Build();
На стороне asp.net web api:
var builder = WebApplication.CreateBuilder(args);
builder.Host
.UseOrleansClient(client =>
{
client
.UseLocalhostClustering()
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "ClusterIdName";
options.ServiceId = "ServiceIdName";
});
})
.ConfigureLogging(logging => logging.AddConsole());
Суть в том, что сам сервер работает в Dev моде, т.е., при запуске того же дебага они нормально общаются, всё работает, никаких ошибок нет. Но я не могу развернуть ту же конфигурацию на Docker, потому что ругается на 127.0.0.1:30000 (В исключении). Кто не знаком, может поинтересоваться, где прописан этот адрес/порт? Он прописан как дефолтный порт в методе .UseLocalhostClustering():