In one of the cases with setting up builds for new source code repositories we came across this issue. One of the microservices was written in ASP.NET core using Visual Studio. It was working fine using Visual Studio or when hosted using IIS, but it fails to start with below error when using dotnet native command inside docker image. The error message was like below:
System.InvalidOperationException: A path base can only be configured using IApplicationBuilder.UsePathBase().
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__7.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.d__2.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__0.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.d__21 1.MoveNext()
‘dotnet.exe’ (CoreCLR: clrhost): Loaded ‘C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0\System.Diagnostics.Tools.dll’. Skipped loading symbols. Module is optimized and the debugger option ‘Just My Code’ is enabled.
Application Insights Telemetry (unconfigured): {“name”:”Microsoft.ApplicationInsights.Dev.Exception”,”time”:”2017-09-25T13:26:29.6923656Z”,”tags”:{“ai.application.ver”:”1.0.0.0″,”ai.internal.sdkVersion”:”aspnet5c:2.1.1″},”data”:{“baseType”:”ExceptionData”,”baseData”:{“ver”:2,”properties”:{“{OriginalFormat}”:”Unable to start Kestrel.”,”CategoryName”:”Microsoft.AspNetCore.Server.Kestrel”,”Exception”:”System.InvalidOperationException: A path base can only be configured using IApplicationBuilder.UsePathBase().\r\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__7.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.d__2.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__0.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.d__21 1.MoveNext()”,”AspNetCoreEnvironment”:”Development”,”DeveloperMode”:”true”},”exceptions”:[{“id”:47609378,”typeName”:”System.InvalidOperationException”,”message”:”Unable to start Kestrel.”,”hasFullStack”:true,”parsedStack”:[{“level”:0,”method”:”Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder+d__7.MoveNext”,”assembly”:”Microsoft.AspNetCore.Server.Kestrel.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60″},{“level”:1,”method”:”System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw”,”assembly”:”System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”},{“level”:2,”method”:”System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification”,”assembly”:”System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”},{“level”:3,”method”:”Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder+AddressesStrategy+d__2.MoveNext”,”assembly”:”Microsoft.AspNetCore.Server.Kestrel.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60″},{“level”:4,”method”:”System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw”,”assembly”:”System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”},{“level”:5,”method”:”System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification”,”assembly”:”System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”},{“level”:6,”method”:”Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder+d__0.MoveNext”,”assembly”:”Microsoft.AspNetCore.Server.Kestrel.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60″},{“level”:7,”method”:”System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw”,”assembly”:”System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”},{“level”:8,”method”:”System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification”,”assembly”:”System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”},{“level”:9,”method”:”Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer+d__21`1.MoveNext”,”assembly”:”Microsoft.AspNetCore.Server.Kestrel.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60″}]}],”severityLevel”:”Critical”}}}
The thread 0x1d7c has exited with code 0 (0x0).
The thread 0x25c0 has exited with code 0 (0x0).
Exception thrown: ‘System.InvalidOperationException’ in System.Private.CoreLib.dll
An unhandled exception of type ‘System.InvalidOperationException’ occurred in System.Private.CoreLib.dll
A path base can only be configured using IApplicationBuilder.UsePathBase().
Or simply putting:
“System.InvalidOperationException: ‘A path base can only be configured using IApplicationBuilder.UsePathBase().’
We checked startup.cs settings and it looked fine. We also checked Program.cs fine and it worked fine. It was giving error only in the docker container. After a lot of troubleshooting, we finally figured out that applicationUrl was mentioned as like http://localhost:8080/apiServer inside Startup method and it should be like only http://localhost:8080. Once we did the change, it resolved the issue for us and we were able to ran it inside docker container fine.