Я новичок в Docker и YARP, поэтому, вероятно, допустил какую-то базовую ошибку.
Для контекста: у меня есть шлюз yarp, созданный в ядре asp.net, и микросервис. также в ядре asp.net. Когда я перехожу по URL-адресу шлюза, я хочу, чтобы он перенаправлялся на микросервис. Мне удалось заставить это работать в двух отдельных контейнерах.
Однако, когда я пытаюсь использовать docker-compose, это не работает. Чаще всего я получаю следующую ошибку: (ошибка HTTP 503) невозможно назначить запрошенный адрес из моего докер-контейнера.
Это мой файл 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
Код: Выделить всё
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
Код: Выделить всё
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)
I've tried host.docker.internal, trying to do it with different IPs, I've used edge instead of chrome (as chrome will now always redirect to google no matter what I do) .
Источник: https://stackoverflow.com/questions/781 ... t-redirect