В настоящее время я использую ASP.NET Core непосредственно на моей рабочей станции Linux.Но я хочу напрямую разрабатывать с Docker, включая удаленную отладку.После разных статей кажется, что vsdbg требуется.Поэтому я попробовал следующее:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
RUN apt update && \
apt install unzip && \
curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l /vsdbg
WORKDIR /app
COPY . .
RUN dotnet publish
WORKDIR /app/bin/Debug/netcoreapp2.2/publish/
ENTRYPOINT dotnet MyApp.dll
Контейнер Docker запущен, и я могу получить доступ к своему приложению ASP.NET Core в браузере.Код VS должен прикрепляться со следующим launch.json
фрагментом:
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}",
"sourceFileMap": {
"/app": "${workspaceRoot}"
},
"pipeTransport": {
"pipeProgram": "docker",
"pipeArgs": ["exec", "-i", "my-docker-container-name"],
"debuggerPath": "/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": false
}
}
После запуска этой записи отладочного вложения отображается список выбора с идентификаторами процессов.Первый содержит dotnet MyApp.dll
, так что это должен быть мой процесс докера.Но после выбора VS Code показывает всплывающее окно, в котором в настоящее время не выполняется ни один процесс с выбранным идентификатором.
Идентификатор процесса верен.Я попытался запустить kill <pid>
, и мой процесс dotnet в контейнере Docker завершился.
Так почему VS Code ломается из-за ошибки, что процесс Docker не запущен?
Системная информация:
- Ubuntu 19.04
- Docker 19.03.0-rc3
- VS Код 1.35.1
Редактировать
Кажется, что-то связано с quoteArgs
.Когда для этого параметра установлено значение false, возникает другая ошибка:
Ошибка выполнения OCI во время выполнения: ошибка exec: container_linux.go: 345: запуск процесса контейнера вызвал "exec: \" / vsdbg / vsdbg --interpreter= vscode \ ": stat / vsdbg / vsdbg --interpreter = vscode: нет такого файла или каталога": неизвестно
Без кавычек он пытается выполнить "/usr/bin/docker" exec -i <my-docker-container-name> /vsdbg/vsdbg --interpreter=vscode
.Я выполнил это вручную, и он запускает vsdbg и держит терминал открытым.Так что quoteArgs: false
кажется правильным для Докера.Хотя я не понимаю, почему это привело к странному отсутствию процесса с ошибкой pid в VS Code.