Напишите в stdin запущенного docker контейнера - PullRequest
0 голосов
/ 21 января 2020

Скажем, я запускаю контейнер docker как демон:

docker run -d foo

Есть ли способ записи в стандартный поток этого контейнера? Примерно так:

docker exec -i foo echo 'hi'

в прошлый раз, когда я проверял флаги -i и -d, были взаимоисключающими при использовании с командой docker run.

1 Ответ

1 голос
/ 21 января 2020

В принципе вы можете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...