自动输入仅运行的docker容器

时间:2015-10-08 04:12:00

标签: bash 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    

要输入它们,我输入:

sudo docker exec -it jolly_galileo /bin/bash

是否有命令或者您是否可以编写bash脚本来自动执行exec以输入正确的容器?

3 个答案:

答案 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