Tengo problemas para configurar la variable ASPNETCORE_ENVIRONMENT al ejecutar mi proyecto en un contenedor docker . El problema es que el valor siempre se establece/sobrescribe en "Desarrollo" .
He intentado configurar la variable de entorno en mi Dockerfile usando
ENV ASPNETCORE_ENVIRONMENT testtambién intenté configurar la variable de entorno en mi archivo docker-compose usando
environment: - ASPNETCORE_ENVIRONMENT=testCuando configuro cualquier otra variable de entorno , funciona , por ejemplo:
environment: - OTHER_TEST_VARIABLE=testSupongo que el valor de la variable ASPNETCORE_ENVIRONMENT se sobrescribe en alguna parte, pero tengo dificultades para encontrar dónde.
He agregado compatibilidad con Docker a un proyecto existente y estoy ejecutando el proyecto directamente a través de la opción de composición de Docker/Docker de Visual Studio.
El proyecto se ejecuta en Asp Net Core 2.1
Gracias por adelantado
Mi 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" } } }También intenté agregar la configuración de la variable de entorno a launchSettings.json
"Docker": { "commandName": "Docker", "launchBrowser": true, "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "test" } }Mi alojamiento web:
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(); }Mi docker-compose.yml
version: '3.4' services: api: image: ${DOCKER_REGISTRY}api build: context: . dockerfile: API/Dockerfile environment: - ASPNETCORE_ENVIRONMENT=testMi 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"]Aquí hay una lista de las variables de entorno en el contenedor.
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#Tuve el mismo problema, uso Rider, tenía la variable de entorno solo en el archivo docker-compose en la sección de entorno de servicio.
Lo que estaba sucediendo de mi parte era que no tenía ConnectionStrings configurado en mi appsettings.Development.json , por lo que se estableció de forma predeterminada en ConnectionStrings del archivo appsettings.json .
Después de agregar la cadena de conexión adecuada al archivo json de desarrollo, todo funcionó bien con el comando docker-compose up. Espero que esto ayude a alguien también.
Me funciona configurando ASPNETCORE_ENVIRONMENT con el comando dotnet CoreDocker.dll --environment="X"
Intente cambiar dockerfile como se muestra a continuación:
ENTRYPOINT ["dotnet", "CoreDocker.dll", "--environment=X"]
Gracias por sus comentarios, resolví mi problema. Solo fue mi error.
Mi problema fue que cuando agregué Docker-Support a mi proyecto, ya tenía un Dockerfile incluido en el proyecto.
Cuando VS generó archivos para la compatibilidad con Docker, se creó un segundo Dockerfile y uno de los Dockerfiles se renombró como "Dockerfile.original".
Estaba usando el "Dockerfile" visible en el explorador de soluciones (que de alguna manera estaba asignado al archivo "Dockerfile.original" en el sistema de archivos)
Parece que, en segundo plano, mis cambios se escribieron en "Dockerfile.original", pero este archivo no se usó mientras se ejecutaba docker-compose. Usó el Dockerfile generado vacío que no estaba visible en el Explorador de soluciones.
En el archivo docker-compose.override.yml, debería encontrar algo así:
version: '3.4' services: webapplication1: environment: - ASPNETCORE_ENVIRONMENT=Development # <==En caso de que utilice la integración de Docker para Visual Studio (contenedor de depuración desde dentro de VS), debe prestar especial atención a los valores predeterminados.
Cuando las herramientas inician el depurador con un comando docker run [..] , proporciona un argumento -e "ASPNETCORE_ENVIRONMENT=Development" . Puede sobrescribir esta variable de entorno en Properties/launchSettings.json .
Aunque no puedo verlo en el comando emitido, en mis pruebas también experimenté otra variable predeterminada ASPNETCORE_URLS=http://+:80 .
Un buen punto de partida para leer sobre VS Docker Tooling es esta publicación de blog y la documentación oficial .
Cuando usa el host genérico en .Net-Core 3.0, puede encontrar problemas cuando usa la nueva variable genérica DOTNET_ENVIRONMENT , ya que entonces tendrá dos entornos especificados. Esto puede ser difícil de depurar. Entonces, lo que me gusta hacer es desactivar todos los valores predeterminados inicialmente y comenzar de nuevo en mi 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" } } } }Para quienes trabajan con el contenedor de linux:
ENTRYPOINT export ASPNETCORE_ENVIRONMENT=Development && exec dotnet "app.dll"
Muy estúpido error que cometí.
Tengo VS 2019 y agregué compatibilidad con Docker a mi proyecto. Entonces, tengo un Dockerfile para mi WebApi y un archivo docker-compose .
Básicamente, probé todo lo que dijeron anteriormente, pero nada funcionó para mí.
Lo que descubrí es que había un docker-compose.override.yml que estaba configurando estas variables env. Espero que esto ayude a alguien.