Looks like the key to this is mostly a case of getting readline working, but you might also have to handle your TERM correctly too.
I tried a Dockerfile like this:
FROM alpine
RUN apk update && \
apk add python3 python3-dev build-base ncurses-dev bash && \
python3 -m ensurepip && \
pip3 install readline
COPY ./inputrc /etc/inputrc
With the inputrc from https://github.com/frol/docker-alpine-env/blob/master/etc/inputrc, copied below:
# do not bell on tab-completion
#set bell-style none
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
$if mode=emacs
# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[7~": beginning-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word
# for rxvt
"\e[8~": end-of-line
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif
Here's a few links that I gathered this info from:
NB - I know it seems daft to be installing bash, but the pip3 install readline
fails without it. Also not ideal to have to be installing gcc etc, though you could cleanup after this if you need to by apk del
-ing a few things.
With all this in place, it worked on my mac but not immediately on putty, though I suspect that just the TERM setup, YMMV.