Отправить команду в работающий контейнер, используя attach без docker exec - PullRequest
2 голосов
/ 24 сентября 2019

У меня есть зацикленный процесс, выполняющийся в контейнере Docker, который принимает набранные команды.В настоящее время я должен использовать docker attach <container>, а затем набрать мою команду, например restart, прежде чем выйти.

Я не могу использовать docker exec, насколько я знаю, так как процесс уже запущен, чтоЯ хочу взаимодействовать, так что, в любом случае, я могу программно передать команду docker attach?

Редактировать: Это команда внутри работающей программы, а не та, которая доступна с оболочкой

1 Ответ

1 голос
/ 24 сентября 2019

Решением может быть использование чего-то вроде:

echo "your input here" | docker attach <your container>

, но ... для этого необходимо не использовать параметр -t, который может вызвать другие проблемы ...


Проверьте эту проблему: Перенаправьте стандартный ввод на docker attach, где Майкл Кросби приводит пример:

Эта проблема была решена.

docker run -i busybox sh -c "while true; do cat /dev/stdin; sleep 1; done;"
test

# ... from another terminal
echo test | docker attach 27f04f3fd73a

Здесь следует отметить, что не работает при запуске контейнера с опцией --tty , -t (Allocate a pseudo-TTY).Я не совсем понял, почему это происходит, поэтому я не буду пытаться объяснить это, некоторые вещи уже были написаны здесь: Запутался в опции Docker -t для выделения псевдо-TTY


Кроме того, из docker run ссылки :

Для интерактивных процессов (например, оболочки) вы должны использовать -i -t вместе, чтобывыделить tty для процесса контейнера.-i -t часто пишется -it, как вы увидите в следующих примерах. Указание -t запрещено, когда клиент получает свой стандартный ввод из канала , например:

$ echo test | docker run -i busybox cat
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...