Как организовать нормальную отладку C# в Docker, чтобы не плясать с бубном
Ребят, тоже пробовал запускать и дебажить C# прямо в докере, и вот эти косяки с пробрасыванием портов и attach timeout — это реально боль. У меня было так же, что настраиваешь devcontainer и docker-compose, а нормальный remote debug не цепляется, особенно если пытаешься в VS Code не выходить и SSH не использовать. .NET 6, примерно средний проект — знакомо.
Проверенная история — не гоняться за каждым хот-ридолом внутри контейнера, а делать билд с нужными символами и просто пробрасывать дебаг-порт нормально. И лучше задавать фиксированный порт для vsdbg, а не динамический. Перезапускать контейнер на каждом шаге — так себе вариант, лучше поправить конфиги один раз и отловить, где таймаут или права не дают подключиться.
Про --privileged и hot reload — у меня было так: если добавить --privileged, то дебагер часто ложится или меняет поведение, и изменения кода нормально не ловятся. Думаю, тут чаще проблема в том, как образ собирается — если на CI не залинковать символы и не выставить нужные переменные окружения, то дебаг тупит. В vsdbg иногда очевидных ошибок нет, но лучше проверить права и то, как запускается процесс внутри контейнера.
Короче, чтобы нормально дебажить C# в докере без заморочек — фиксированные порты для дебага, нормальный билд с debug info, не гнаться за всяким hot reload в докере и проверять права для vsdbg. Если кто-то на своём опыте ещё пилоты нашёл, делитесь.