programing

도커의 ASPNETCORE_ENERVICE

minimums 2023. 8. 16. 22:07
반응형

도커의 ASPNETCORE_ENERVICE

도커 컨테이너에서 프로젝트를 실행하는 ASPNETCORE_ENERVINENT 변수를 설정하는 데 문제가 있습니다.문제는 이 값이 항상 "개발"로 설정/덮어쓰기된다는 것입니다.

다음을 사용하여 Docker 파일에서 환경 변수를 설정해 보았습니다.

ENV ASPNETCORE_ENVIRONMENT test

또한 다음을 사용하여 내 도커에 저장된 파일에서 환경 변수를 설정하려고 시도했습니다.

environment:
      - ASPNETCORE_ENVIRONMENT=test

다른 환경 변수를 설정하면 다음과 같이 작동합니다.

environment:
      - OTHER_TEST_VARIABLE=test

ASPNETCORE_ENERVICEENMENT 변수 값이 어딘가에 덮어쓰여져 있는 것 같은데 어디에 있는지 찾기가 어렵습니다.

기존 프로젝트에 도커 지원을 추가했으며 Visual Studio의 도커/도커 작성 옵션을 통해 직접 프로젝트를 실행하고 있습니다.

이 프로젝트는 AsNet Core 2.1에서 실행됩니다.

잘 부탁드립니다.

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"

    }

  }
}

또한 launchSettings.json에 환경 변수 구성을 추가해 보았습니다.

"Docker": {
          "commandName": "Docker",
          "launchBrowser": true,
          "launchUrl": "{Scheme}://localhost:{ServicePort}/api/values",
          "environmentVariables": {
           "ASPNETCORE_ENVIRONMENT": "test"
      }
        }

내 웹 호스트:

 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();

        }

내 도커 컴포지.yml

version: '3.4'

services:
  api:
    image: ${DOCKER_REGISTRY}api
    build:
      context: .
      dockerfile: API/Dockerfile
    environment:
     - ASPNETCORE_ENVIRONMENT=test 

내 도커 파일:

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"]

컨테이너에 있는 환경 변수 목록입니다.

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#

는 구을통작니다합동해성uring다▁config▁for를 구성하여 작동합니다.ASPNETCORE_ENVIRONMENTdotnet CoreDocker.dll --environment="X"

변경 시도dockerfile와 같이: 아와같이래:

ENTRYPOINT ["dotnet", "CoreDocker.dll", "--environment=X"]

docker-compose.override.yml 파일에서 다음과 같은 내용을 찾을 수 있습니다.

version: '3.4'

services:
  webapplication1:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development # <==

Visual Studio 도커 툴링

도커 통합 for Visual Studio(VS 내의 디버그 컨테이너)를 사용하는 경우에는 기본값에 특히 주의해야 합니다.

기본 환경 변수

툴링이 디버거를 시작할 때docker run [..]▁an,를 합니다.-e "ASPNETCORE_ENVIRONMENT=Development"쟁논. 에이 덮변수 있니다에서 이 수 있습니다.Properties/launchSettings.json.

수 , 기본 변수인 실된명서는볼에수테없스서는다에기다발니습생했변수가본른행트지를 했습니다.ASPNETCORE_URLS=http://+:80뿐만 아니라.

VS Docker Tooling에 대한 좋은 출발점은 이 블로그 게시물과 공식 문서입니다.

.Net-Core 3.0 일반 호스트

에서 일반 호스트를 사용하는 경우. 3 일반 Net-Core 3.0을 할 때 가 발생할 수 .DOTNET_ENVIRONMENT변수. 그러면 두 개의 환경이 지정되기 때문입니다.디버깅하기 어려울 수 있습니다. 제가 부터 새로 하는 것입니다.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"
      }
    }
  }
}

이 답변은 명시되어 있지 않으며, 저에게는 그것이 주된 문제였습니다.제가 가진 모든 것은 정확했습니다. 단, 그 위치를 제외하고는 말이죠.ARG그리고.ENV내 도커 파일에 있는 설정.

중요한 것은 다음을 정의하는 위치에 유의하는 것입니다.ARG그리고.ENV도커 파일에 있습니다.파일의 맨 위에서 또는 필요한 이미지를 빌드하기 전에 이러한 작업을 수행하면 해당 작업이 지워지고 최종 이미지에 표시되지 않습니다.

도커 파일

FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim AS build-env
WORKDIR /app

##############################
#     WON'T WORK UP HERE!    #
##############################
# ARG ENVIRONMENT
# ENV ASPNETCORE_ENVIRONMENT $ENVIRONMENT

# Expose ports
EXPOSE 80
EXPOSE 443

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0-bullseye-slim
WORKDIR /app
COPY --from=build-env /app/out .


##############################
#      WORKS DOWN HERE!      #
##############################
# Setup your variables before running.
ARG ENVIRONMENT
ENV ASPNETCORE_ENVIRONMENT $ENVIRONMENT

ENTRYPOINT ["dotnet", "my.assembly.dll"]

청록색의 얼룩무늬.

- task: Docker@2
  displayName: Build an image
  inputs:
    containerRegistry: 'azureContainerConnection'
    repository: 'my-repo'
    command: 'build'
    Dockerfile: '**/Dockerfile'
    tags: latest
    arguments: '--build-arg=ENVIRONMENT=Development'

코드

[HttpGet]
public IActionResult HealthCheck()
{
    return Ok(_webHostEnvironment.EnvironmentName);
}

내가 저지른 아주 어리석은 실수.

저는 VS 2019가 있고 제 프로젝트에 도커 지원을 추가했습니다.는 그서저는이 있습니다.Dockerfile 및 내 WebApi 를a 한위의 docker-composejava.

기본적으로, 위에서 당신들이 말한 모든 것을 시도했지만, 저에게는 아무 것도 되지 않았습니다.

제가 알아낸 것은 이러한 환경 변수를 설정하는 docker-compose.override.yml이 있다는 것입니다.이것이 누군가에게 도움이 되기를 바랍니다.

당신의 의견에 감사드리며, 저는 제 문제를 해결했습니다.그건 그냥 제 실수였어요.

문제는 프로젝트에 도커 지원을 추가했을 때 이미 도커 파일이 프로젝트에 포함되어 있었다는 것입니다.

VS가 Docker-support용 파일을 생성할 때 두 번째 Docker 파일이 생성되었으며 Docker 파일 중 하나의 이름이 "Dockerfile.original"로 변경되었습니다.

솔루션 탐색기에 표시된 "Docker file"(파일 시스템의 "Docker file.original" 파일에 매핑됨)을 사용하고 있었습니다.

백그라운드에서 "Dockerfile.original"로 기록된 변경 사항이 있는 것 같습니다. 하지만 이 파일은 Docker-compose가 실행되는 동안 사용되지 않았습니다.솔루션 탐색기에 표시되지 않는 빈 생성 도커 파일을 사용했습니다.

저도 같은 문제가 있었습니다. 라이더를 사용하고 있습니다. 서비스 환경 섹션의 도커 합성 파일에만 환경 변수가 있었습니다.

제 쪽에서는 연결 문자열이 설정되어 있지 않았습니다.appsettings.Development.json그래서 그것은 기본적으로.appsettings.json파일의 연결 문자열입니다.

개발 json 파일에 적절한 연결 문자열을 추가한 후 docker-compose up 명령으로 모든 것이 정상적으로 작동했습니다.이것이 누군가에게도 도움이 되기를 바랍니다.

Linux 컨테이너로 작업하는 사용자:

ENTRYPOINT export ASPNETCORE_ENVIRONMENT=Development && exec dotnet "app.dll"

하고있다docker compose down 의도이실아제작수않행습지니다하의 을 주지 .docker images그게 당신이 할 때 다시 떠오르는 것입니다.docker compose up -d.

은 아마 야할수있다니를 해야 할입니다.docker rmi imageName그리고 나서 하라.docker compose up -d이미지를 다시 빌드할 수 있습니다.

제이 설정정을 합니다.ENV ASPNETCORE_ENVIRONMENT Development또는 말로ENV ASPNETCORE_URLS "http://0.0.0.0:6000"도커 파일에서 잘 작동할 것입니다.docker compose up -d다시.

PS - 실행 시 아래와 같은 로그가 표시됩니다.docker compose up -d이미지가 구축되고 있음을 의미합니다.

[+] Building 12.9s (11/11) FINISHED                                                                
 => [app internal] load .dockerignore                                                         0.0s
 => => transferring context: 2B                                                               0.0s
 => [app internal] load build definition from Dockerfile                                      0.0s
 => => transferring dockerfile: 634B                                                          0.0s
 => [app internal] load metadata for mcr.microsoft.com/dotnet/sdk:2.0                         0.0s
 => [app internal] load build context                                                         0.1s
 => => transferring context: 164.84kB                                                         0.1s
 => [app build-env 1/5] FROM mcr.microsoft.com/dotnet/sdk:6.0                                 0.0s
 => CACHED [app build-env 2/5] WORKDIR /app                                                   0.0s
 => [app build-env 3/5] COPY . ./                                                             0.2s
 => [app build-env 4/5] RUN dotnet restore Strange/*.csproj                                8.7s
 => [app build-env 5/5] RUN dotnet publish -c Release -o out PerfRunner/*.csproj              3.7s
 => CACHED [app stage-1 3/3] COPY --from=build-str-env /app/out .                                 0.0s 
 => [app] exporting to image                                                                  0.0s 
 => => exporting layers                                                                       0.0s 
 => => writing image sha256:a14415b5a8738fb8e28333f23c550370662d4503d1cf7008fc2b7c0469cb09bb  0.0s 
 => => naming to docker.io/library/str-app                                             0.0s 
[+] Running 2/2                                                                                    
 ✔ Network str_default  Created                                                        0.0s 
 ✔ Container str-app-srvc     Started 

언급URL : https://stackoverflow.com/questions/52376855/aspnetcore-environment-in-docker

반응형