Docker

如何登錄到正在執行的 docker 實例?

  • December 1, 2017

docker看它是如何工作的:

ubuntu@ip-172-31-14-19:~$ 
ubuntu@ip-172-31-14-19:~$ sudo docker run --net=host -d -t jmar71n/freepbx
2792243260a8de33d1a775d115188e601fc556e500b5ad085e09b4133d0f3d06
ubuntu@ip-172-31-14-19:~$ 
ubuntu@ip-172-31-14-19:~$ sudo docker run -it jmar71n/freepbx bash
root@46f45b8973c3:/# 
root@46f45b8973c3:/# exit
exit
ubuntu@ip-172-31-14-19:~$ 
ubuntu@ip-172-31-14-19:~$ sudo docker run -it jmar71n/freepbx bash
root@813557bf8922:/# 
root@813557bf8922:/# echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
root@813557bf8922:/# 

現在,每個run都是新實例嗎?這就是提示改變的原因嗎?hostname是每個人的唯一 ID嗎run

我將如何登錄到第一個實例--net=host

當我嘗試exec flag時,它失敗了:

ubuntu@ip-172-31-14-19:~$ 
ubuntu@ip-172-31-14-19:~$ sudo docker exec -it jmar71n/freepbx bash
Error: No such container: jmar71n/freepbx
ubuntu@ip-172-31-14-19:~$ 

為什麼?登錄該實例的正確方法是什麼?

ubuntu@ip-172-31-14-19:~$ 
ubuntu@ip-172-31-14-19:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              20c44cd7596f        2 days ago          123MB
hello-world         latest              725dcfab7d63        2 weeks ago         1.84kB
jmar71n/freepbx     latest              8dda2a58fde1        19 months ago       1.54GB
ubuntu@ip-172-31-14-19:~$ 

Docker 執行,從給定的圖像創建一個新的實例(虛擬化)環境。

要登錄給定實例,您需要執行 docker exec 但您需要使用您要登錄的容器的 id 執行 docker exec。這可以通過以下命令實現:

docker ps -a

然後在獲得 id 後,使用以下命令登錄容器:

docker exec -it <containerid> bash

執行run命令時,每次都會創建新容器。

run您使用選項執行,-it因此您在 docker 容器內被連接,這就是您的提示正在改變的原因。因此,您使用新提示執行的所有命令都將在容器內執行。

當你說exit你終止了你的活動程序(bash,因為你在創建過程中將它作為參數傳遞)並且你的容器停止了,因為它只存在於 PID 1 的主程序存在的時候。

為了連接到實例,首先,-d以分離模式執行它,然後您可以執行docker attach. docs您可以通過docker ps -a. 與 相同docker exec -it <containerID> bash

引用自:https://unix.stackexchange.com/questions/405757