Имеется некоторый сервис, написанный на Go и запускаемый в kubernetes из podman image. Необходимо его удалённо отладить и для этого в этот podman image, помимо самого сервиса, копируется ещё и отладчик dlv. Копируется из $HOME/go/bin
в локальной Федоре. Изначально Dockerfile начинался строчкой FROM scratch
и для запуска самого сервиса этого было достаточно. Однако dlv в таком окружении не хочет запускаться и при этом в консоле пода печатается сообщение о том, что /dlv not found
. Если scratch заменить каким либо полноценным линуксом, например основанным на Убунте имедже Go, то dlv начинается работать.
Очевидно, что в первом случае отладчику не хватает каких-то библиотек. Однако тащить из-за этого почти триста мегабайт какой-то Убунты совсем не хочется. Существует ли другой путь или более мелкий базовый имидж? Alpine не предлагать, там этот dlv не работает. Скорее всего из-за другой реализации libc
Собирать статически слинкованный dlv отдельно для удалённой отладки раз в пол года как-то тоже не хочется. А может существует официальная статически слинкованная сборка? Я пока не нашёл.
Вот внешние библиотеки dlv из Федоры, установленного банальным go install ...
$ ldd ~/go/bin/dlv
linux-vdso.so.1 (0x00007f21b8162000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f21b8131000)
libc.so.6 => /lib64/libc.so.6 (0x00007f21b7f3d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f21b8164000)