I found an interesting edge case. Running commands in a LXD container is non-interactive as one would expect (at least when you use it via pyLXD https://github.com/lxc/pylxd/blob/2.3.1/pylxd/models/instance.py#L438)
But apparently debconf falls back to readline as frontend according to my logs:
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
Which can lead to a situation like this where it hangs forever
root 7632 0.0 0.3 51844 48808 ? Ss Dec08 0:20 apt-get install --yes --no-install-recommends <package>
root 7729 0.0 0.0 7024 3604 pts/1 Ss+ Dec08 0:00 /usr/bin/dpkg --status-fd 42 --configure --pending
root 7766 0.0 0.0 14980 12076 pts/1 S+ Dec08 0:00 /usr/bin/perl -w /usr/share/debconf/frontend /var/lib/dpkg/info/openssh-server.postinst configure 1:7.4p1-10+deb9u6
root 7779 0.0 0.0 2336 628 pts/1 S+ Dec08 0:00 /bin/sh /var/lib/dpkg/info/openssh-server.postinst configure 1:7.4p1-10+deb9u6
root 7782 0.0 0.0 5456 3464 pts/1 S+ Dec08 0:00 /bin/bash /usr/bin/ucf --three-way --debconf-ok --sum-file /usr/share/openssh/sshd_config.md5sum /tmp/filem7V2oS /etc/ssh/sshd_config
A way to workaround this problem is to set DEBIAN_FRONTEND=noninteractive
manually.
Has anyone had similar problems and how did you solve them?
Is there a way to force a real non-interactive mode from LXD side or can this only be fixed inside the container.