Как отлаживать докернизированную самоотключающуюся программу?

Я пишу образы Docker для сопровождающих пакетов для Debian-подобных дистрибутивов. Эти образы получены из официальных образов соответствующих дистрибутивов, подобных Debian, путем добавления пакетов, необходимых для сопровождения, и запускаются с нескольких полезных подключенных томов, так что различные элементы конфигурации берутся из среды пользователя, а не хранятся в контейнере.

Когда я запускаю оболочку с этого изображения и выполняю apt-src build чтобы подготовить пакет, операция начинается нормально, но соединение между контейнером и tty необъяснимо разрывается. Изучение состояния контейнера с docker ps -a показывает, что это Exited (0), Это очень странно, поскольку это означает, что что-то заставляет оболочку завершиться во время выполнения ее подкоманды.

Какие шаги могут помочь мне отладить это странное поведение, выяснить, что здесь происходит, и в конечном итоге исправить это?


Команда запуска контейнера

Вот как я запускаю контейнер:

docker run\
    --interactive=true\
    --tty=true\
    --rm=false\
    --volume "${maintainer_pkgdir}:${maintainer_docker_pkgdir}"\
    --volume "${maintainer_srcdir}:${maintainer_docker_srcdir}"\
    --volume "${maintainer_confdir}:${maintainer_docker_confdir}"\
    "${maintainer_repository}/${maintainer_image}"

Стенограмма сессии

Сессия состоит из двух команд apt-src install bmake а также apt-src build bmake:

% apt-src install bmake
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Need to get 544 kB of source archives.
Get:1 http://ftp.debian.org/debian/ unstable/main bmake 20140620-3 (dsc) [1785 B]
Get:2 http://ftp.debian.org/debian/ unstable/main bmake 20140620-3 (tar) [509 kB]
Get:3 http://ftp.debian.org/debian/ unstable/main bmake 20140620-3 (diff) [33.0 kB]
Fetched 544 kB in 0s (681 kB/s)
gpgv: Signature made Tue Sep 16 20:22:02 2014 UTC using RSA key ID 1A2D268D
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./bmake_20140620-3.dsc
dpkg-source: info: extracting bmake in bmake-20140620
dpkg-source: info: unpacking bmake_20140620.orig.tar.gz
dpkg-source: info: unpacking bmake_20140620-3.debian.tar.xz
dpkg-source: info: applying 100_makefile.boot.diff
dpkg-source: info: applying 140_multiarch.diff
dpkg-source: info: applying 160_manpage.diff
dpkg-source: info: applying 180_bmake_path_max.diff
% apt-src build bmake
I: Building in /home/anvil/bmake-20140620 ..
dpkg-buildpackage: source package bmake
dpkg-buildpackage: source version 20140620-3
dpkg-buildpackage: source changed by Andrew Shadura <andrewsh@debian.org>
dpkg-buildpackage: host architecture amd64
 dpkg-source --before-build bmake-20140620
 fakeroot debian/rules clean
dh clean --with=autoreconf
   dh_testdir
   debian/rules override_dh_auto_clean
make[1]: Entering directory `/home/anvil/bmake-20140620'
/usr/bin/make -f Makefile.boot clean
make[2]: Entering directory `/home/anvil/bmake-20140620'
rm -f arch.o buf.o compat.o cond.o dir.o for.o hash.o job.o main.o make.o make_malloc.o parse.o str.o strlist.o suff.o targ.o trace.o var.o util.o meta.o strlcpy.o lst.lib/lstAppend.o lst.lib/lstAtEnd.o lst.lib/lstAtFront.o lst.lib/lstClose.o lst.lib/lstConcat.o lst.lib/lstDatum.o lst.lib/lstDeQueue.o lst.lib/lstDestroy.o lst.lib/lstDupl.o lst.lib/lstEnQueue.o lst.lib/lstFind.o lst.lib/lstFindFrom.o lst.lib/lstFirst.o lst.lib/lstForEach.o lst.lib/lstForEachFrom.o lst.lib/lstInit.o lst.lib/lstInsert.o lst.lib/lstIsAtEnd.o lst.lib/lstIsEmpty.o lst.lib/lstLast.o lst.lib/lstMember.o lst.lib/lstNext.o lst.lib/lstOpen.o lst.lib/lstRemove.o lst.lib/lstReplace.o lst.lib/lstSucc.o lst.lib/lstPrev.o  bmake
make[2]: Leaving directory `/home/anvil/bmake-20140620'
make[1]: Leaving directory `/home/anvil/bmake-20140620'
   dh_autoreconf_clean
   dh_clean
 debian/rules build

1 ответ

Решение

Присоединение программы к tty представляется не совсем надежной операцией, а это означает, что она работает только в предположении, что программа использует tty разумно.

Программа su печально известна тем, что злоупотребляет подключением tty, поэтому вместо устранения проблемы проще избежать использования su или любой другой программы, которая злоупотребляет подключением tty.

Другие вопросы по тегам