我通常想在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
通过一点点谷歌搜索,我找到this issue - 但是,如果我删除-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
答案 0 :(得分:1)
我倾向于这样做但我嵌套了我的命令
docker exec -it $(docker ps | awk 'NR > 1 {print $1}') bash
但是,如果有多个容器在运行,你会收到错误。
答案 1 :(得分:1)
请注意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
检查文档