Для контекста: у меня есть шлюз 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
Код: Выделить всё
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)
Я пробовал host.docker.internal, пытаясь сделать это с разными IP-адресами, я использовал Edge вместо Chrome (поскольку Chrome теперь всегда будет перенаправляться в Google, что бы я ни делал).
Подробнее здесь: https://stackoverflow.com/questions/781 ... t-redirect
Мобильная версия