自动input只运行docker集装箱

在云中,我有多个实例,每个实例运行一个具有不同随机名称的容器,例如:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5dc97950d924 aws_beanstalk/my-app:latest "/bin/sh -c 'python 3 hours ago Up 3 hours 80/tcp, 5000/tcp, 8080/tcp jolly_galileo 

为了input他们,我input:

 sudo docker exec -it jolly_galileo /bin/bash 

有没有一个命令,或者你可以写一个bash脚本来自动执行exec来input正确的容器?

“正确的容器”?

要确定什么是“正确的”容器,你的bash脚本仍然需要该容器的id或名称。

例如,我在我的.bashrc有一个函数 :

 deb() { docker exec -u git -it $1 bash; } 

这样,我会input:

 deb jolly_galileo 

(它使用帐户git,但你不必)

这是我的最终解决scheme。 它编辑实例的.bashrc,如果还没有编辑,打印出docker ps,定义dock函数,然后input容器。 如果用户想访问原始实例,则可以input“exit”,再次“退出”退出ssh。

 commands: bashrc: command: if ! grep -Fxq "sudo docker ps" /home/ec2-user/.bashrc; then echo -e "dock() { sudo docker exec -it $(sudo docker ps -lq) bash; } \nsudo docker ps\ndock" >> /home/ec2-user/.bashrc; fi 

正如VonC所指出的,如果你发现自己在做重复的事情,通常你必须自己编写一些shell脚本。 我自己在这里制作了一个工具,如果你有Bash 4+的话就可以工作。

安装

 wget -qO- https://raw.githubusercontent.com/Pithikos/dockerint/master/docker_autoenter >> ~/.bashrc 

然后,只需input容器的首字母即可input容器。

 $> docker ps CONTAINER ID IMAGE .. 807b1e7eab7e ubuntu .. 18e953015fa9 ubuntu .. 19bd96389d54 ubuntu .. $> 18 root@18e953015fa9:/# 

这是通过利用在Bash 4中引入的函数command_not_found_handle 。 如果没有find一个命令,脚本会尝试看看你input的是一个容器,如果是,它将运行docker exec <container> bash