2016-05-28

Docker Container 進入並使用終端機

早期,阿舍開始用 Docker 的時候,第一個困擾到阿舍的,就是不知道怎麼進入 Docker Container 的終端機,因為,阿舍用習慣了虛擬機器,所以,在啟動好 Docker 的 Container 之後,習慣上,阿舍就會想說要進入這個 Container 的終端機來巡一巡和操作一下,於是,阿舍直覺上想到的就是,那要怎麼用 SSH 來連到 Docker Container,但是,Docker Container 不是虛擬機器,因此,做法上,當然是不太一樣的哩 ...



後來,阿舍才瞭解到,其實,如果啟動時配置得當,那麼會需要進入 Docker Container 的終端機來操作的機會並不多,但是,偶爾,還是會有需要的,所以,一開始,阿舍是用 Docker 的 attach 指令來操作的,不過,實在不是那麼好用,而且,阿舍還會因為太習慣按 Ctrl-C 而常常會不小心把執行中的 Container 給關掉哩 ... 所以,阿舍不是那麼的建議用 docker attach 來連上 Docker Container 的終端機畫面做操作,而且,實務上,docker attach 的用途也不是這樣子用的哩 ...

好,SSH 不能用,docker attach 不好用,所以,阿舍就找到了 docker exec 這個指令來用,在用途上,這個 docker exec 指令是用來讓使用者直接啟動 Docker Container 內的程式的,因此,只要用下面指令的方式,就可以啟動 Docker Container 內的 Bash Shell 來操作,所以,也就等於是進入 Docker Container 內的終端機了哩 !

$ sudo docker exec -it [Container 名稱或 ID] /bin/bash

以阿舍有一個名叫「ayu-ubuntu」(Container 的 ID 前四碼是 3388)的 Ubuntu Container 為例,阿舍就執行下面第一行或第二行的指令,接著,就會出現這個 Container 的終端機命令列了哩 ! ... 喔 ! 提醒一下,一般的情況下,進入後,就是 root 的身份哩 ...

$ sudo docker exec -it ayu-ubuntu /bin/bash

$ sudo docker exec -it 3388 /bin/bash

喔 ! 以上是理想的狀態下,最後面只要加上要執行「/bin/bash」的 Shell 程式路徑和名稱就可以了,但是 ...不幸的是,並不是所有的 Linux 發行版本都會有 Bash Shell,而且,是放在「/bin」路徑下,因此,如果用上面的方法不能進入到 Container 的終端機的話,那麼就可能要查一下所使用的 Container 的 Image 是用那個作業系統建立的,然後,它支援的 Shell 是那一種,放在那裡哩 ...

以阿舍有一次拿到一個以 Alpine 發行版本做的 Docker Image 來說,它預設是支援 ash,而這個 ash 檔案也是放在「/bin」路徑下,所以,阿舍就要下面這行指令的方式來進入它的終端機哩 ....

$ sudo docker exec -it 3388 /bin/ash

至於 ... 要怎麼知道拿到的 Docker Image 檔是用那一個 Linux 發行版本呢 ? 基本上,阿舍都是先用「/bin/bash」來試,如果不行,才去找到這個 Docker Image 的 Dockerfile 來看是,是「From」那一個 Image 來建的哩 ...


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁