Bagaimana cara memasukkan bash atau ssh ke dalam wadah yang sedang berjalan dalam mode latar belakang?

Saya ingin ssh atau bash menjadi wadah docker yang sedang berjalan. Silakan, lihat contoh:

$ sudo docker run -d webserverwebserver is clean image from ubuntu:14.04$ sudo docker psCONTAINER ID  IMAGE            COMMAND    CREATED STATUS  PORTS          NAMES665b4a1e17b6  webserver:latest /bin/bash  ...     ...     22/tcp, 80/tcp loving_heisenberg 

Sekarang saya ingin mendapatkan sesuatu seperti ini (masuk ke wadah yang sedang berjalan):

$ sudo docker run -t -i webserver (atau mungkin 665b4a1e17b6 sebaliknya)
$ root@665b4a1e17b6:/#

Namun ketika saya menjalankan baris di atas saya mendapatkan ID kontainer baru:

$ root@42f1e37bd0e5:/#

Saya menggunakan Vagrant dan saya ingin mendapatkan perilaku yang sama seperti vagrant ssh.

Jawabannya adalah Docker attach perintah. Jadi untuk contoh saya di atas, solusinya adalah:

$ sudo docker attach 665b4a1e17b6 #by IDor$ sudo docker attach loving_heisenberg #by Name$ root@665b4a1e17b6:/#

Untuk Docker versi 1.3 atau yang lebih baru: Terima kasih kepada pengguna WiR3D siapa yang menyarankan cara lain untuk mendapatkan cangkang wadah. Jika kita menggunakan attach kita dapat menggunakan hanya satu contoh dari shell. Jadi jika kita ingin membuka terminal baru dengan contoh baru dari shell kontainer, kita hanya perlu menjalankan berikut:

$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID

atau

$ sudo docker exec -i -t loving_heisenberg /bin/bash #by Name$ root@665b4a1e17b6:/#

Dari Docker 1.3 dan seterusnya:

docker exec -it <containerIdOrName> bash

Pada dasarnya, jika wadah Docker mulai menggunakan /bin/bash perintah Anda dapat mengaksesnya menggunakan attach. Jika tidak, maka Anda perlu menjalankan perintah untuk membuat instance Bash di dalam wadah menggunakan exec.

Juga untuk keluar dari Bash tanpa meninggalkan Bash berjalan dalam proses nakal:

exit

Yap, sesederhana itu.

Meskipun penulis pertanyaan secara khusus mengatakan bahwa mereka tertarik pada wadah yang sedang berjalan, perlu juga dicatat bahwa jika wadah tidak berjalan, tetapi Anda ingin menjalankannya untuk melihat-lihat Anda dapat menjalankan:

docker run -i -t --entrypoint /bin/bash <imageID>