чтение stdout в конвейере с использованием "-" не удается для "docker exec"

961
Sridhar-Sarnobat

Я хочу запустить терминал bash для моего экземпляра Docker, отправив первый идентификатор контейнера в Docker Exec:

docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 | docker exec -i -t - bash 

Предполагается, что финал -передает stdout предыдущего конвейерного процесса как переменную. Но вместо этого я получаю:

Error response from daemon: no such id: - 

Я предполагаю, что dockerпрограмма мешает тому, как оболочка читает аргументы.

Это можно обойти? (либо через dockerпрограмму, либо через оболочку).


Дополнительная информация

Этот субпайплайн:

docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 

производит вывод:

7dae6507d01a 

что правильно. Так что нет проблем здесь.

2

1 ответ на вопрос

2
user2313067

-не анализируется оболочкой, это просто аргумент, который некоторые команды распознают как «чтение из стандартного ввода». Видимо, докер этого не делает.

Вам нужно использовать xargs для передачи идентификатора в качестве реального аргумента. Это должно работать:

 docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 | xargs -I '{}' docker exec -i -t '{}' bash 
Глупый я - я пытался стать слишком умным с помощью `-`, который я недавно узнал, в то время как в течение многих лет я использовал` xargs` даже с `-I`! Проклятие знаний. Sridhar-Sarnobat 8 лет назад 0

Похожие вопросы