도커부터 시작하여 패스 파인더로 사용할 기본 dotnet 코어 콘솔 앱을 만듭니다. 그런 다음 Windows 컨테이너를 대상으로하는 docker-compose 지원을 추가합니다.
Visual Studio에서 이미지를 빌드하고 실행할 수 있으며 앱을 디버그 할 수도 있습니다. 하지만 Docker CLI에서 동일한 앱을 실행하려고하면 앱이 c : \ app 폴더에 게시되지 않았 음을 나타냅니다. 앱은 "Hello World"를 STDOUT에 보냅니다.
여기에 dockerfile이 있습니다.
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat
FROM mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1903 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1903 AS build
WORKDIR /src
COPY ["dotnetCore3.csproj", "./"]
RUN dotnet restore "dotnetCore3.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "dotnetCore3.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "dotnetCore3.csproj" -c Release -o /app/publish
docker-compose.yml :
version: '3.4'
services:
dotnetcore3:
image: *****/myregistry/dotnetcore3
build:
context: .
dockerfile: Dockerfile
달리는:
docker run *****/myregistry/dotnetcore3:dev
앱을 실행하는 대신 Docker 내부에서 셸을 실행합니다. 셸을 사용하면 c : \ app 폴더에 아무것도 없습니다.
컨테이너 도구 창의 전체 로그는 다음과 같습니다.
========== Preparing Containers ==========
Getting Docker containers ready...
docker-compose -f "C:\Users\MS20004\source\repos\dotnetCore3\docker-compose.yml" -f "C:\Users\MS20004\source\repos\dotnetCore3\docker-compose.override.yml" -f "C:\Users\MS20004\source\repos\dotnetCore3\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15898560444299855188 --no-ansi config
networks:
default:
external:
name: nat
services:
dotnetcore3:
build:
context: C:\Users\*****\source\repos\dotnetCore3
dockerfile: Dockerfile
labels:
com.microsoft.created-by: visual-studio
com.microsoft.visual-studio.project-name: dotnetCore3
target: base
entrypoint: cmd /c "set DISABLE_PERFORMANCE_DEBUGGER=1 & C:\\remote_debugger\\x64\\msvsmon.exe
/noauth /anyuser /silent /nostatus /noclrwarn /nosecuritywarn /nofirewallwarn
/nowowwarn /timeout:2147483646 /LogDebuggeeOutputToStdOut"
environment:
NUGET_FALLBACK_PACKAGES: c:\.nuget\fallbackpackages
NUGET_PACKAGES: C:\.nuget\packages
image: dotnetcore3:dev
labels:
com.microsoft.visualstudio.debuggee.arguments: ' --additionalProbingPath c:\.nuget\packages
--additionalProbingPath c:\.nuget\fallbackpackages "bin\Debug\netcoreapp3.0\dotnetCore3.dll"'
com.microsoft.visualstudio.debuggee.killprogram: C:\remote_debugger\x64\utils\KillProcess.exe
dotnet.exe
com.microsoft.visualstudio.debuggee.program: '"C:\Program Files\dotnet\dotnet.exe"'
com.microsoft.visualstudio.debuggee.workingdirectory: C:\app
volumes:
- C:\Users\*****\source\repos\dotnetCore3:C:\app:rw
- C:\Users\*****\onecoremsvsmon\16.3.0040.0:C:\remote_debugger:ro
- C:\Program Files\dotnet\sdk\NuGetFallbackFolder:c:\.nuget\fallbackpackages:ro
- C:\Users\*****\.nuget\packages:c:\.nuget\packages:ro
version: '3.4'
docker ps --filter "status=running" --format {{.ID}};{{.Names}}
docker-compose -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.yml" -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.override.yml" -f "C:\Users\*****\source\repos\dotnetCore3\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15898560444299855188 --no-ansi build
Building dotnetcore3
Step 1/4 : FROM mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1903 AS base
---> 279077ab63e3
Step 2/4 : WORKDIR /app
---> Using cache
---> 6ce0262ac12a
Step 3/4 : LABEL com.microsoft.created-by=visual-studio
---> Using cache
---> 3756662eccd6
Step 4/4 : LABEL com.microsoft.visual-studio.project-name=dotnetCore3
---> Using cache
---> 71d353776b98
Successfully built 71d353776b98
Successfully tagged dotnetcore3:dev
docker-compose -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.yml" -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.override.yml" -f "C:\Users\*****\source\repos\dotnetCore3\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15898560444299855188 --no-ansi up -d --no-build --force-recreate --remove-orphans
Creating dockercompose15898560444299855188_dotnetcore3_1 ...
Creating dockercompose15898560444299855188_dotnetcore3_1 ... done
Done! Docker containers are ready.
========== Preparing Containers ==========
Getting Docker containers ready...
docker-compose -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.yml" -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.override.yml" -f "C:\Users\*****\source\repos\dotnetCore3\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15898560444299855188 --no-ansi config
networks:
default:
external:
name: nat
services:
dotnetcore3:
build:
context: C:\Users\*****\source\repos\dotnetCore3
dockerfile: Dockerfile
labels:
com.microsoft.created-by: visual-studio
com.microsoft.visual-studio.project-name: dotnetCore3
target: base
entrypoint: cmd /c "set DISABLE_PERFORMANCE_DEBUGGER=1 & C:\\remote_debugger\\x64\\msvsmon.exe
/noauth /anyuser /silent /nostatus /noclrwarn /nosecuritywarn /nofirewallwarn
/nowowwarn /timeout:2147483646 /LogDebuggeeOutputToStdOut"
environment:
NUGET_FALLBACK_PACKAGES: c:\.nuget\fallbackpackages
NUGET_PACKAGES: C:\.nuget\packages
image: *****/dockerhub/dotnetcore3:dev
labels:
com.microsoft.visualstudio.debuggee.arguments: ' --additionalProbingPath c:\.nuget\packages
--additionalProbingPath c:\.nuget\fallbackpackages "bin\Debug\netcoreapp3.0\dotnetCore3.dll"'
com.microsoft.visualstudio.debuggee.killprogram: C:\remote_debugger\x64\utils\KillProcess.exe
dotnet.exe
com.microsoft.visualstudio.debuggee.program: '"C:\Program Files\dotnet\dotnet.exe"'
com.microsoft.visualstudio.debuggee.workingdirectory: C:\app
volumes:
- C:\Users\*****\source\repos\dotnetCore3:C:\app:rw
- C:\Users\*****\onecoremsvsmon\16.3.0040.0:C:\remote_debugger:ro
- C:\Program Files\dotnet\sdk\NuGetFallbackFolder:c:\.nuget\fallbackpackages:ro
- C:\Users\*****\.nuget\packages:c:\.nuget\packages:ro
version: '3.4'
docker ps --filter "status=running" --format {{.ID}};{{.Names}}
365e9e5b6bb8;dockercompose15898560444299855188_dotnetcore3_1
docker exec -i 365e9e5b6bb8 C:\remote_debugger\x64\utils\KillProcess.exe dotnet.exe
docker-compose -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.yml" -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.override.yml" -f "C:\Users\*****\source\repos\dotnetCore3\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15898560444299855188 --no-ansi build
Building dotnetcore3
Step 1/4 : FROM mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1903 AS base
---> 279077ab63e3
Step 2/4 : WORKDIR /app
---> Using cache
---> 6ce0262ac12a
Step 3/4 : LABEL com.microsoft.created-by=visual-studio
---> Using cache
---> 3756662eccd6
Step 4/4 : LABEL com.microsoft.visual-studio.project-name=dotnetCore3
---> Using cache
---> 71d353776b98
Successfully built 71d353776b98
Successfully tagged *****/myregistry/dotnetcore3:dev
docker-compose -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.yml" -f "C:\Users\*****\source\repos\dotnetCore3\docker-compose.override.yml" -f "C:\Users\*****\source\repos\dotnetCore3\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15898560444299855188 --no-ansi up -d --no-build --force-recreate --remove-orphans
Recreating dockercompose15898560444299855188_dotnetcore3_1 ...
Recreating dockercompose15898560444299855188_dotnetcore3_1 ... done
Done! Docker containers are ready.
========== Debugging ==========
docker ps --filter "status=running" --filter "name=dockercompose15898560444299855188_dotnetcore3_" --format {{.ID}} -n 1
54b4bc125895
docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}" 54b4bc125895
172.30.67.88
========== Debugging ==========
docker ps --filter "status=running" --filter "name=dockercompose15898560444299855188_dotnetcore3_" --format {{.ID}} -n 1
54b4bc125895
docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}" 54b4bc125895
172.30.67.88
========== Debugging ==========
docker ps --filter "status=running" --filter "name=dockercompose15898560444299855188_dotnetcore3_" --format {{.ID}} -n 1
314dff0ffdf6
docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}" 314dff0ffdf6
172.30.75.30
========== Debugging ==========
docker ps --filter "status=running" --filter "name=dockercompose15898560444299855188_dotnetcore3_" --format {{.ID}} -n 1
314dff0ffdf6
docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}" 314dff0ffdf6
172.30.75.30
최신 정보:
Docker CLI에서 빌드하려고 시도한 결과 프록시가 컨테이너에서 인터넷 액세스를 차단하고 있음을 발견했습니다. Visual Studio에서 빌드가 실패하는 이유가 무엇인지 모르겠습니다. 로그에 오류가 표시되지 않지만 dotnet 명령의 출력을 볼 수 없습니다.
해결책은 컨테이너에서 빌드하는 대신 앱을 빌드에 미리 컴파일하기 위해 dockerfile을 수정하는 것이 었습니다.
다음은 최종 DockerFile입니다.
FROM mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1903 AS base
WORKDIR /app
COPY ".\bin\Release\netcoreapp3.0" "/app"
#just for debug purposes
RUN dir
FROM base AS final
ENTRYPOINT ["dotnet", "dotnetCore3.dll"]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다