aspnetrun / run-aspnetcore-microservices

Microservices on .Net platforms which used ASP.NET Web API, Docker, RabbitMQ, MassTransit, Grpc, Yarp API Gateway, PostgreSQL, Redis, SQLite, SqlServer, Marten, Entity Framework Core, CQRS, MediatR, DDD, Vertical and Clean Architecture implementation with using latest features of .NET 8 and C# 12
https://www.udemy.com/course/microservices-architecture-and-implementation-on-dotnet/?couponCode=JUNE24
MIT License
2.53k stars 1.38k forks source link

Ocelot's and docker-compose is not support each other configurations #82

Open arminatwork opened 4 months ago

arminatwork commented 4 months ago

Hello. I'm here to tell you the ocelot.json configuration is wrong by this Docker and docker-compose files. Your host and Ports are using the Docker internal network but I didn't see your config write this network bridge. we've 2 ways to solve this problem:

First:

  1. change all Host and Ports that you've written in the Ocelot ReRoutes configuration to this config so don't need network-bridge anymore: Host: "host.docker.internal" Port: "the exposed port in docker-compose file"

I think this will work right.

the final Sample ocelot.json file after I have just changed Host and Ports

"DownstreamPathTemplate": "/api/v1/Discount/{productName}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "host.docker.internal", "Port": 5003 //this port have exposed in docker-compose.override.yml file }

Second:

  1. create a network bridge in docker-compose and then use that network for all containers. In this way, ocelot will use Internal docker network that knows the Host and Ports.

Done.

the final Sample ocelot.json file after I have created the network-bridge

"DownstreamPathTemplate": "/api/v1/Discount/{productName}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "discount_api", // My container_name "Port": 80 //this port have exposed in DockerFile }

if you have any questions let's be easy and ask.