不能pipe道泊坞窗pash命令
我通常想在Docker镜像上打开一个bash shell。 一个多命令的过程是这样的:
$ 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
从一个小的谷歌search,我发现这个问题 – 但是,如果我删除-t
选项,命令“完成”立即。
我已经确认手动复制$ docker ps | awk 'NR > 1 {print $1}'
的输出 $ docker ps | awk 'NR > 1 {print $1}'
进入docker exec -it {} bash
的适当位置。
编辑:从pipe道切出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
我倾向于这样做,但我嵌套我的命令
docker exec -it $(docker ps | awk 'NR > 1 {print $1}') bash
警告的话,如果有多个容器运行,你会得到错误。
注意docker ps -q
只输出正在运行的容器的id
如果你只有一个容器启动,就这样做
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
检查文档