В принципе вы можете docker attach
к нему. CTRL + C остановит контейнер (отправив SIGINT процессу); CTRL + P , CTRL + Q отсоединится от него и оставит его работающим (если вы запустили контейнер с docker run -it
) .
Единственная хитрость в том, что docker attach
ожидает запуска в каком-то терминале; Вы можете сделать что-то вроде , запустить его под script
, чтобы удовлетворить это требование. Вот пример:
# Create a new empty directory
mkdir x
# Run a container, in the background, that copies its stdin
# to a file in that directory
docker run -itd -v $PWD/x:/x --name cat busybox sh -c 'cat >/x/y'
# Send a string in
echo foo | script -q /dev/null docker attach cat
# Note, EOF here stops the container, probably because /bin/cat
# exits normally
# Clean up
docker rm cat
# See what we got out
cat x/y
На практике, если основной способ, с помощью которого программа взаимодействует, - это текст на ее стандартном вводе и стандартном выводе, Docker не является для нее отличным механизмом упаковки. В средах более высокого уровня, таких как Docker Compose или Kubernetes, отправлять контент таким способом становится все сложнее, и часто предполагается, что контейнер может работать полностью автономно. Просто вызов программы быстро усложняется (как намекает этот вопрос). Если у вас есть что-то вроде, скажем, инструмента установки create-реагировать-приложения, которое задает кучу интерактивных вопросов, а затем записывает данные в файловую систему хоста, будет гораздо проще запустить его непосредственно на хосте, а не в Docker.