TL; DR;
Tak więc zainstalowałem VS 2017 i miałem do tego dostęp, aby zrozumieć, co tu się dzieje. Po obejrzeniu procesu budowania swojego projektu znalazłem poniżej
docker-compose -f "C:\Users\tarlabs\Desktop\AspNetCoreMultiProject\docker-compose.yml" -f "C:\Users\tarlabs\Desktop\AspNetCoreMultiProject\docker-compose.override.yml" -f "C:\Users\tarlabs\Desktop\AspNetCoreMultiProject\obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose15184637154516733497 kill
doker-compose.override.yml
version: '3'
services:
web:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "80"
api:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "80"
co nie jest dużo zainteresowania.
doker-compose.vs.debug.g.yml
version: '3'
services:
api:
image: api:dev
build:
args:
source: obj/Docker/empty/
environment:
- DOTNET_USE_POLLING_FILE_WATCHER=1
- NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages
volumes:
- C:\Users\tarlabs\Desktop\AspNetCoreMultiProject:/app
- C:\Users\tarlabs\vsdbg:/remote_debugger:ro
- C:\Users\tarlabs\.nuget\packages\:/root/.nuget/packages:ro
- C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages:ro
entrypoint: tail -f /dev/null
labels:
com.microsoft.visualstudio.debuggee.program: "dotnet"
com.microsoft.visualstudio.debuggee.arguments: " --additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages bin/Debug/netcoreapp2.0/Api.dll"
com.microsoft.visualstudio.debuggee.workingdirectory: "/app"
com.microsoft.visualstudio.debuggee.killprogram: "/bin/bash -c \"if PID=$$(pidof -x dotnet); then kill $$PID; fi\""
web:
image: web:dev
build:
args:
source: obj/Docker/empty/
environment:
- DOTNET_USE_POLLING_FILE_WATCHER=1
- NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages
volumes:
- C:\Users\tarlabs\Desktop\AspNetCoreMultiProject:/app
- C:\Users\tarlabs\vsdbg:/remote_debugger:ro
- C:\Users\tarlabs\.nuget\packages\:/root/.nuget/packages:ro
- C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages:ro
entrypoint: tail -f /dev/null
labels:
com.microsoft.visualstudio.debuggee.program: "dotnet"
com.microsoft.visualstudio.debuggee.arguments: " --additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages bin/Debug/netcoreapp2.0/Web.dll"
com.microsoft.visualstudio.debuggee.workingdirectory: "/app"
com.microsoft.visualstudio.debuggee.killprogram: "/bin/bash -c \"if PID=$$(pidof -x dotnet); then kill $$PID; fi\""
Kilka ciekawych rzeczy
ENTRYPOINT
definiujemy nie będzie różnicy w czasie debugowania gdyż przesłonięte przez VS z wartością: tail -f /dev/null
- Wartość
bin/Debug/netcoreapp2.0/Web.dll
wynosi
- Katalog roboczy do debugowania jest zawsze ustawiony na
/app
użyciu com.microsoft.visualstudio.debuggee.workingdirectory
- zamontować Volume
C:\Users\tarlabs\Desktop\AspNetCoreMultiProject:/app
Patrząc na woluminów C:\Users\tarlabs\Desktop\AspNetCoreMultiProject:/app
, byłem jak Wow! Wszystko, co masz w folderze /app
w pliku Dockerfile, zostanie tylko przesłonięte przez ten uchwyt. Więc niezależnie od tego, czy skompilujesz i umieścisz pliki w tym, czy nie zrobisz nic, nie zrobisz różnicy.
Teraz poszedłem wewnątrz pojemnika i zrozumiał, że Web.dll
jest insider /app/Web/bin/Debug/netcoreapp2.0/Web.dll
ale debugger jest spodziewałem się, że na /app/bin/Debug/netcoreapp2.0/Web.dll
. Po przejrzeniu wszystkich ustawień nigdzie nie mogłem znaleźć tej ścieżki.
Potem grałem z nowym projektem. Dodanie jednego projektu z obsługą Docker i później dodanie innego projektu z obsługą dockera.To dało mi wskazówkę jak docker-compose.yml
był
version: '3'
services:
webapplication1:
image: webapplication1
build:
context: ./WebApplication1
dockerfile:Dockerfile
webapplication2:
image: webapplication2
build:
context: ./../WebApplication2
dockerfile: Dockerfile
ten dał mi wskazówkę, że dynamiczny docker-compose.vs.debug.g.yml
plik ma woluminów na podstawie kontekstu podanej w swojej docker-compose.yml
. Teraz patrząc na twój projekt.
doker-compose.yml
version: '3'
services:
web:
image: web
build:
context: .
dockerfile: Web/Dockerfile
api:
image:api
build:
context: .
dockerfile: Api/Dockerfile
Ponieważ kontekst jest .
Volume Górze jest generowany jako
- C:\Users\tarlabs\Desktop\AspNetCoreMultiProject:/app
Aby poprawić że aktualizujemy nasze docker-compose.yml
do
version: '3'
services:
web:
image: web
build:
context: ./Web
dockerfile: Dockerfile
api:
image:api
build:
context: ./Api
dockerfile: Dockerfile
Następny nasz Docke rfile robił zbyt wiele rzeczy, których typ debuggera VS po prostu ignoruje. Więc po prostu potrzebuje 2 linie w Dockerfile
do debugowania, aby faktycznie pracują
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
Rest wszystko, co nie było po prostu wyrzucane przez objętość zamontować. Nie ma sensu robić tego w celu debugowania. Możesz użyć podejścia wielostopniowego do wdrożenia, ale nie do debugowania. Po wykonaniu tych dwóch zmian w swoim debugowania Projekt rozpoczął pracę dla mnie
Jest to najprawdopodobniej dlatego, że Visual Studio ma dodatkowy plik Compose, który jest ładowany. Sprawdź, czy oba są w konflikcie z biegiem w twoim przypadku. Byłby to "docker-compose.ci.build.yml" –
@ TarunLalwani. Próbowałem usunąć plik '... ci.build.yml', ale nic nie zasmuciło się. – user348173
Więc jeśli nie używasz wieloetapowego pliku docker, to działa? –