Невозможно подключиться к хранилищу в контейнере из-за пределов сети докера - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь установить бункер Orleans внутри контейнера Docker . В начале клиент не будет находиться в контейнере.

Я использую Docker в Windows в Контейнер Linux режим. Я могу запустить и подключить как клиента, так и хранилище, когда клиент также находится в контейнере.

Силосохранилище настроено так:

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 в клиенте, это работает. Когда я использую любой другой IP-адрес хоста докера, я получаю следующую ошибку в логах бункера:

Gateway received unexpected non-proxied connection from *sgn/01111111-1111-1111-1111-111111111111/11111111 at source address 172.17.0.1:38428

Почему я получаю эту ошибку, когда пытаюсь использовать адрес, отличный от localhost? netstat -n -a показывает мне, что бункер прослушивает 0.0.0.0 на хосте.

...