Не удается передать команду docker pid в команду bash

Обычно я хочу открыть оболочку bash на образе докера. Многокомандный процесс для этого будет:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
bba983d72d48        scubbo/datenight    "apachectl -DFOREGROU"   7 days ago          Up 7 days           0.0.0.0:80->80/tcp   pensive_bell
$ docker exec -it bba983d72d48 bash

Я хотел бы сократить это. Однако я получаю следующую ошибку:

$ docker ps | awk 'NR > 1 {print $1}' | xargs -I {} docker exec -it {} bash
cannot enable tty mode on non tty input

Немного погуглив, я нашел это проблема - однако, если я отбрасываю опцию -t, команда немедленно "завершается".

Я подтвердил, что ручное копирование и вставка вывода $ docker ps | awk 'NR > 1 {print $1}' в соответствующую позицию docker exec -it {} bash выполняется успешно.

РЕДАКТИРОВАТЬ: Вырезать docker ps из трубы также не удается:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
4f20409c37b7        scubbo/datenight    "apachectl -DFOREGROU"   8 days ago          Up 8 days           0.0.0.0:80->80/tcp   drunk_northcutt
$ docker ps -q
4f20409c37b7
$ echo '4f20409c37b7' | xargs -I {} docker exec -it {} bash
cannot enable tty mode on non tty input

person scubbo    schedule 26.07.2016    source источник


Ответы (2)


Обратите внимание, что docker ps -q выводит только идентификаторы запущенных контейнеров.

Если у вас запущен только один контейнер, просто выполните

docker exec -it $(docker ps -q) bash

если вы хотите войти в последний запущенный контейнер

docker exec -it $(docker ps -lq) bash

Если вы дадите имя своему контейнеру при его запуске

docker run --name nostalgic...

то вы можете отфильтровать его с помощью

docker exec -it $(docker ps -q --filter "name=nostalgic") bash

Проверить документ

https://docs.docker.com/engine/reference/commandline/ps/

person user2915097    schedule 27.07.2016
comment
Спасибо, отличный набор команд! Я все еще не уверен, почему я не могу передать идентификатор в xargs docker exec. - person scubbo; 27.07.2016

Я склонен делать это, но я вставляю свои команды

docker exec -it $(docker ps | awk 'NR > 1 {print $1}') bash

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

person toad013    schedule 26.07.2016