App Services have long been a super simple way to spin up a web app in Azure. The barrier to entry is low, maintenance is easy. It just works. App Services recently got a turbo boost in the form of Azure App Service on Linux. Being able to deploy to Linux is exciting enough; but the real reason this is notable because you can deploy Docker images that will be run as app services.
I cannot over-emphasise just how easy this makes getting a Docker image into Production. Yay Azure!
The Mystery of Configuration
Applications need configuration. ASP.Net Core applications are typically configured by an appsettings.json
file which might look like so:
{
"Parent": {
"ChildOne": "I'm a little teapot",
"ChildTwo": "Short and stout"
}
}
With a classic App Service you could override a setting in the appsettings.json
by updating "Application settings" within the Azure portal. You'd do this in the style of creating an Application setting called Parent:ChildOne
or Parent:ChildTwo
. To be clear: using colons to target a specific piece of config.
You can read about this approach here. Now there's something I want you to notice; consider the colons below:
If you try and follow the same steps when you're using Web App for Containers / i.e. a Docker image deployed to an Azure App Service on Linux you cannot use colons:
When you hover over the error you see this message: This field can only contain letters, numbers (0-9), periods ("."), and underscores ("_")
. Using .
does not work alas.
What do I do?
So it turns out you just can't configure App Services on Linux.
Jokes!
No, of course you can and here I can help. After more experimentation than I'd like to admit I happened upon the answer. Here it is:
Where you use :
on a classic App Service, you should use a __
(double underscore) on an App Service with containers. So Parent__ChildOne
instead of Parent:ChildOne
. It's as simple as that.
Why is it like this?
Honestly? No idea. I can't find any information on the matter. Let me know if you find out.