Я могу создать тестовое репо, если это необходимо.Но суть этой проблемы в том, что я могу отладить образ Docker, созданный docker-compose, когда я использую команду up
.Я НЕ могу отлаживать тот же контейнер при использовании команды run
.В обоих случаях я вижу запуск моего приложения.Отладчик vs-кода, похоже, просто не может подключиться к контейнеру Docker при использовании docker-compose run
.
Это похоже на мою рабочую задачу запуска в vs-коде (к которой может подключаться отладчик):
{
"type": "node",
"request": "launch",
"name": "Docker: Debug",
"runtimeExecutable": "docker-compose",
"runtimeArgs": [
"up"
],
"port": 9229,
"stopOnEntry": true,
"restart": true,
"timeout": 30000,
"localRoot": "${workspaceRoot}",
"remoteRoot": "/app",
"outFiles": [ "${workspaceRoot}/dist/**/*.js" ],
"console": "externalTerminal",
"internalConsoleOptions": "neverOpen",
"protocol": "inspector",
"showAsyncStacks": true
}
Мой файл docker-compose также указывает здесь команду (npm run start-app
, например), где start-app
имеет следующее определение:
nodemon --legacy-watch --watch ./dist/app1 --inspect=0.0.0.0:9229 --nolazy ./dist/app1/index.js
Почему у меня естьпроблема:
Я не хочу указывать команду в файле docker-compose.yml
, потому что у меня одно изображение с несколькими процессами внутри.(Будет один контейнер на процесс, но все они будут использовать один и тот же образ.) В настоящее время у меня это работает для развертывания kubernetes и запуска / отладки локальной разработки.Я хотел бы запустить и отладить в контейнере, запустив контейнер с указанной командой.
Я хочу иметь возможность запустить контейнер и указать, какое приложение запускать в моем коде против launch.json
файл, аналогичный приведенному ниже:
{
"type": "node",
"request": "launch",
"name": "Docker: Debug",
"runtimeExecutable": "docker-compose",
"runtimeArgs": [
"run",
"all",
"npm",
"run",
"start-app"
],
"port": 9229,
"stopOnEntry": true,
"restart": true,
"timeout": 30000,
"localRoot": "${workspaceRoot}",
"remoteRoot": "/app",
"outFiles": [ "${workspaceRoot}/dist/**/*.js" ],
"console": "externalTerminal",
"internalConsoleOptions": "neverOpen",
"protocol": "inspector",
"showAsyncStacks": true
}
К вашему сведению, all
в списке аргументов относится к названию моей службы в файле docker-compose.yml
.