Docker-compose не работает с перенаправлением локального хостаC#

Место общения программистов C#
Ответить
Anonymous
 Docker-compose не работает с перенаправлением локального хоста

Сообщение Anonymous »

Я новичок в docker и yarp, поэтому, вероятно, допустил какую-то базовую ошибку.
Для контекста: у меня есть шлюз yarp, созданный в ядре asp.net, и микросервис. также в ядре asp.net. Когда я перехожу по URL-адресу шлюза, я хочу, чтобы он перенаправлялся на микросервис. Мне удалось заставить это работать в двух отдельных контейнерах.
Однако, когда я пытаюсь использовать docker-compose, это не работает. Чаще всего я получаю следующую ошибку: (ошибка HTTP 503) невозможно назначить запрошенный адрес из моего Docker-контейнера.
Это мой файл appsettings.json из шлюза. Да, кое-что закомментировано. Я уже некоторое время с этим играюсь.

Код: Выделить всё

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}"
},
"Transforms": [
{ "PathPattern": "{**catch-all}" }
]
}
//"route2": {
//  "ClusterId": "cluster2",
//  "Match": {
//    "Path": "/2/{**catch-all}"
//  },
//  "Transforms": [
//    { "PathPattern": "{**catch-all}" }
//  ]
//}
},
"Clusters": {
"cluster1": {
"LoadBalancingPolicy": "RoundRobin",
"Destinations": {
"destination1": {
"Address": "http://host.docker.internal:5100/weatherforecast"
}
}
}
//"cluster2": {
//  "LoadBalancingPolicy": "RoundRobin",
//  "Destinations": {
//    "destination2": {
//      "Address": "https://172.35.0.2:5101/PageCall"
//    }
//  }
//}
}
}
}

это моя докерная композиция

Код: Выделить всё

version: '3.4'

services:
gateway:
image: ${DOCKER_REGISTRY-}gateway
build:
context: .
dockerfile: Gateway/Dockerfile
#ports:
#- "5000:5000"
#- "5001:5001"
networks:
proxybackend:
posting-service:
image: ${DOCKER_REGISTRY-}postingservice
build:
context: .
dockerfile: Posting-service/Dockerfile
#ports:
#- "5100:5100"
#- "5101:5101"
networks:
proxybackend:

networks:
proxybackend:
name: proxybackend
driver: bridge
и это переопределение docker-compose

Код: Выделить всё

version: '3.4'

services:
gateway:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
ports:
- "5000:80"
- "5001:443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
posting-service:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
ports:
- "5100:80"
- "5101:443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
полная ошибка yarp выглядит следующим образом

Код: Выделить всё

System.Net.Http.HttpRequestException: Cannot assign requested address (localhost:5101)
2024-03-12 10:06:02        --->  System.Net.Sockets.SocketException (99): Cannot assign requested address
2024-03-12 10:06:02          at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
2024-03-12 10:06:02          at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
2024-03-12 10:06:02          at System.Net.Sockets.Socket.g__WaitForConnectWithCancellation|277_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken)
2024-03-12 10:06:02          at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
2024-03-12 10:06:02          --- End of inner exception stack trace ---
2024-03-12 10:06:02          at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
2024-03-12 10:06:02          at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
2024-03-12 10:06:02          at System.Net.Http.HttpConnectionPool.AddHttp2ConnectionAsync(HttpRequestMessage request)
2024-03-12 10:06:02          at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)
2024-03-12 10:06:02          at System.Net.Http.HttpConnectionPool.GetHttp2ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
2024-03-12 10:06:02          at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
2024-03-12 10:06:02          at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
2024-03-12 10:06:02          at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer, CancellationToken cancellationToken)
Я попробовал все, что мог, и понятия не имею, где именно что-то идет не так.
Я пробовал host.docker.internal, пытаясь сделать это с разными IP-адресами, я использовал Edge вместо Chrome (поскольку Chrome теперь всегда будет перенаправляться в Google, что бы я ни делал).

Подробнее здесь: https://stackoverflow.com/questions/781 ... t-redirect
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»