应用未安装在 dotnetcore visual studio 模板的 docker 图像上
App not installed on docker image for dotnetcore visual studio template
我从 dockers 开始,所以我创建了一个基本的 dotnet 核心控制台应用程序,用作探路者。
然后我添加 docker-compose 支持目标 windows 容器。
我可以构建 运行 来自 visual studio 的图像,甚至调试应用程序。
但是当我尝试从 docker CLI 运行 相同的应用程序时,它发现应用程序没有发布到 c:\app 文件夹。
该应用将 "Hello World" 发送到 STDOUT。
这里是docker文件:
#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
运行 shell 来自 docker 而不是 运行 应用程序。
使用 shell,我发现 c:\app 文件夹中没有任何内容。
这里是容器工具的完整日志 window:
========== 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.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.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"]
我从 dockers 开始,所以我创建了一个基本的 dotnet 核心控制台应用程序,用作探路者。 然后我添加 docker-compose 支持目标 windows 容器。
我可以构建 运行 来自 visual studio 的图像,甚至调试应用程序。 但是当我尝试从 docker CLI 运行 相同的应用程序时,它发现应用程序没有发布到 c:\app 文件夹。 该应用将 "Hello World" 发送到 STDOUT。
这里是docker文件:
#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
运行 shell 来自 docker 而不是 运行 应用程序。 使用 shell,我发现 c:\app 文件夹中没有任何内容。
这里是容器工具的完整日志 window:
========== 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.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.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"]