在云中,我有多个实例,每个实例都运行一个具有不同随机名称的容器,例如:
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
要输入它们,我输入:
sudo docker exec -it jolly_galileo /bin/bash
是否有命令或者您是否可以编写bash脚本来自动执行exec以输入正确的容器?
答案 0 :(得分:3)
“正确的容器”?
要确定什么是“正确的”容器,您的bash脚本仍然需要该容器的ID或名称。
例如,我have a function in my .bashrc
:
deb() { docker exec -u git -it $1 bash; }
那样,我会输入:
deb jolly_galileo
(它使用帐户git,但您不必)
答案 1 :(得分:1)
这是我的最终解决方案。它编辑实例的.bashrc,如果尚未编辑,打印出docker ps,定义dock函数,并进入容器。然后,如果用户想要访问原始实例,则可以键入“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
答案 2 :(得分:1)
正如VonC指出的那样,如果你发现自己做了重复的事情,通常你必须自己编写一些shell脚本。我自己制作了一个工具here,如果你有Bash 4 +,它可以工作。
安装
wget -qO- https://raw.githubusercontent.com/Pithikos/dockerint/master/docker_autoenter >> ~/.bashrc
然后您只需输入容器的第一个字母即可输入容器。
$> docker ps
CONTAINER ID IMAGE ..
807b1e7eab7e ubuntu ..
18e953015fa9 ubuntu ..
19bd96389d54 ubuntu ..
$> 18
root@18e953015fa9:/#
这可以通过利用函数command_not_found_handle
introduced in Bash 4来实现。如果找不到命令,脚本将尝试查看您键入的内容是否为容器,如果是,则它将运行docker exec <container> bash
。