Здравствуйте!
Есть 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()
: