ASPNETCORE_ENVIRONMENT in Docker
Solution 1
It works for me by configuring ASPNETCORE_ENVIRONMENT
with command dotnet CoreDocker.dll --environment="X"
Try to change dockerfile
like below:
ENTRYPOINT ["dotnet", "CoreDocker.dll", "--environment=X"]
Solution 2
In the docker-compose.override.yml file, you should find something like that:
version: '3.4'
services:
webapplication1:
environment:
- ASPNETCORE_ENVIRONMENT=Development # <==
Solution 3
Visual Studio Docker Tooling
In case you use the Docker integration for Visual Studio (debug container from within VS) you need to pay special attention to the defaults.
Default Environment Variables
When the tooling is starting the debugger with a docker run [..]
command, it supplies an -e "ASPNETCORE_ENVIRONMENT=Development"
argument. You can overwrite this environment variable in the Properties/launchSettings.json
.
Even though I can't see it in the issued command, in my testing I experienced another default variable ASPNETCORE_URLS=http://+:80
as well.
A good starting point to read about VS Docker Tooling is this blog post and the official documentation.
.Net-Core 3.0 Generic Host
When you use the generic host in .Net-Core 3.0 you might encounter issues when you use the new generic DOTNET_ENVIRONMENT
variable, since you will have two environments specified then. This can be hard to debug. So what I like to do is to unset all defaults initially and start fresh in my Properties/launchSettings.json
:
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"Docker": {
"commandName": "Docker",
"environmentVariables": {
// Overwrite default VS Docker Tools environment variables first (ASPNETCORE_ENVIRONMENT=Development; ASPNETCORE_URLS=http://+:80)
// https://www.paraesthesia.com/archive/2019/06/18/tips-on-container-tools-for-visual-studio/
"ASPNETCORE_ENVIRONMENT": "",
"ASPNETCORE_URLS": "",
"DOTNET_ENVIRONMENT": "Production",
"DOTNET_URLS": "http://+:80"
}
}
}
}
Solution 4
Thanks for your comments, I solved my issue. It was just my mistake.
My problem was that when I added Docker-Support to my project I already had a Dockerfile included in the project.
When VS generated files for Docker-support, there was a second Dockerfile created, and one of the Dockerfiles was renamed to "Dockerfile.original".
I was using the "Dockerfile" visible in the solution explorer (which was somehow mapped to the "Dockerfile.original" file in the filesystem)
It seems that in the background my changes where written to "Dockerfile.original" but this file wasn't used while docker-compose was running. It used the empty generated Dockerfile that wasn't visible in the Solution explorer.
Aaron
Updated on July 09, 2022Comments
-
Aaron almost 2 years
i have problems setting the ASPNETCORE_ENVIRONMENT variable running my project in a docker container. The problem is that the value is always set/overwritten to "Development".
I have tried setting the environment variable in my Dockerfile using
ENV ASPNETCORE_ENVIRONMENT test
also tried setting the environment variable in my docker-compose file using
environment: - ASPNETCORE_ENVIRONMENT=test
When I set any other environment variable it works, for example:
environment: - OTHER_TEST_VARIABLE=test
I assume that the value for ASPNETCORE_ENVIRONMENT variable is overwritten somewhere but I have difficulties finding out where.
I have added Docker support to an existing project and am running the project directly via Visual Studio's Docker/Docker compose option
The project runs on Asp Net Core 2.1
Thanks in advance
My launchSettings.json:
{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:53183/", "sslPort": 0 } }, "profiles": { "Docker": { "commandName": "Docker", "launchBrowser": true, "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values" } } }
I also tried adding the environment variable configuration to the launchSettings.json
"Docker": { "commandName": "Docker", "launchBrowser": true, "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "test" } }
My Webhost:
public static IWebHost BuildWebHost(string[] args) { return WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((builderContext,config) => { config.AddEnvironmentVariables(); }) .ConfigureLogging((hostingContext, logging) => { logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); logging.AddConsole(); logging.AddDebug(); }) .UseStartup<Startup>() .Build(); }
My docker-compose.yml
version: '3.4' services: api: image: ${DOCKER_REGISTRY}api build: context: . dockerfile: API/Dockerfile environment: - ASPNETCORE_ENVIRONMENT=test
My Dockerfile:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY API/API.csproj API/ RUN dotnet restore API/API.csproj COPY . . WORKDIR /src/API RUN dotnet build API.csproj -c Release -o /app FROM build AS publish RUN dotnet publish API.csproj -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "API.dll"]
Here is a list of the environment variables in the container
C:\Users\Administrator>docker exec -ti d6 /bin/bash root@d6f26d2ed2c3:/app# printenv HOSTNAME=d6f26d2ed2c3 ASPNETCORE_URLS=http://+:80 test1=asdasd test2=dasdasd test3=dasdasd PWD=/app HOME=/root NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages DOTNET_USE_POLLING_FILE_WATCHER=1 ASPNETCORE_VERSION=2.1.3 DOTNET_RUNNING_IN_CONTAINER=true TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ASPNETCORE_ENVIRONMENT=Development _=/usr/bin/printenv root@d6f26d2ed2c3:/app#
-
Lee Gary over 4 yearsIt worked for me when I did this too, but I looked harder and realised that I had 2 sets of environment values set, merging them into one worked fine after that
-
Javid over 3 yearsSaved my life just like that. yeah.