我正在尝试在Docker容器中设置Orleans silo。一开始,客户端不会在容器中。
我正在使用Linux容器模式下的Windows上的Docker。 当客户端也在容器中时,我可以让客户端和silo同时运行并连接。
silo配置如下:
var builder = new SiloHostBuilder()
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "DOCKER-SILO";
options.ServiceId = "EZ-DOCKER";
})
.UseAdoNetClustering(options =>
{
options.Invariant = "MySql.Data.MySqlClient";
options.ConnectionString = "server=XXX;user id=orleans;password='XXX';persistsecurityinfo=True;database=orleans;SslMode=None";
})
.Configure<EndpointOptions>(options =>
{
var adressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
options.AdvertisedIPAddress = adressList.First();
options.GatewayPort = 30000);
options.SiloPort = 11111);
})
客户端配置如下:
client = new ClientBuilder()
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "DOCKER-SILO";
options.ServiceId = "EZ-DOCKER";
})
.UseStaticClustering(new IPEndPoint(IPAddress.Parse("192.168.0.13"), 30000))
这个筒仓是这样运行的:
PS C:\XXX> docker run -p 30000:30000 --expose 11111 --add-host host.docker.internal:192.168.0.13 ezorleanssilolinux
Dockerfile 相当简单:
FROM mcr.microsoft.com/dotnet/core/runtime:2.1-stretch-slim AS base
WORKDIR /app
FROM base AS final
WORKDIR /app
#COPY --from=publish /app .
COPY ["eZ.Orleans.Silo/publish", "."]
ENTRYPOINT ["dotnet", "eZ.Orleans.Silo.dll"]
当我在客户端中使用127.0.0.1
作为静态网关IP时,它能够正常工作。但是,如果使用docker主机的任何其他IP,则会在仓储日志中出现以下错误:
Gateway received unexpected non-proxied connection from *sgn/01111111-1111-1111-1111-111111111111/11111111 at source address 172.17.0.1:38428
当我在本地地址以外的任何其他地址进行尝试时,为什么会出现此错误?
netstat -n -a
显示该容器正在主机上监听0.0.0.0。