2015-10-08 119 views
2

在雲中,我有多個實例,每個實例運行具有不同的隨機名稱的容器,如:只有自動進入運行搬運工容器

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  

進入其中,I型:

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

您將輸入以'docker exec -it $(docker ps -lq)bash'開頭的最後一個容器,但沒有魔法,正如VonC所說。 – user2915097

+0

這對我有用! 'sudo docker exec -it $(sudo docker ps -lq)bash' –

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 
+0

不錯的反饋,除了我的回答外,謝謝。 +1 – VonC

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 
[email protected]:/# 

這是通過取函數command_not_found_handleintroduced in Bash 4的優勢。如果找不到命令,腳本將嘗試查看您輸入的內容是否爲容器,如果是,則將運行docker exec <container> bash

+0

有趣的方法。 +1 – VonC