Hello, I have a question that has been bothering me for a while, but for which I have not yet found a solution.
I run Consul in a docker container (http://localhost:8500).
I also have a WebApi written in C#. I want this api to register itself on Consul. This works fine (as long as this api is not running in the docker container).
var registration = new AgentServiceRegistration();
hostApplicationLifetime.ApplicationStarted.Register(() =>
{
var addresses = server.Features.Get<IServerAddressesFeature>();
var address = addresses.Addresses.First();
var uri = new Uri(address);
registration = new AgentServiceRegistration()
{
ID = $"{serviceName}-{uri.Port}",
Name = $"{serviceName}",
Address = $"{uri.Host}",
Port = uri.Port
};
logger.LogInformation("Registering with Consul");
consulClient.Agent.ServiceDeregister(registration.ID).ConfigureAwait(true);
consulClient.Agent.ServiceRegister(registration).ConfigureAwait(true);
});
lifetime.ApplicationStopping.Register(() =>
{
logger.LogInformation("Unregistering from Consul");
consulClient.Agent.ServiceDeregister(registration.ID).ConfigureAwait(true);
});
Here the application “knows” the port it is running on.
But when I put this application into a Docker container, it doesn’t work anymore. Because now the application would have to log on to Consul with the port of the container, as I understand it.
How can this be done? The application should “know” this port and use it for registration.
Thanks for the help in advance!