Saya ingin ssh atau menabrak wadah buruh pelabuhan berjalan. Silakan, lihat contoh:
$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
sekarang saya ingin mendapatkan sesuatu seperti ini (masuk ke dalam wadah yang sedang berjalan):
$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
Saya menggunakan Vagrant dan saya ingin mendapatkan perilaku yang sama vagrant ssh
.
sudo docker exec -i -t 665b4a1e17b6 /bin/sh
dapat menginstal program dan paket aptsudo docker exec -i -t container-name /bin/bash
adalah cara untuk pergi.Jawaban:
Jawabannya adalah
attach
perintah Docker . Jadi untuk contoh saya di atas, solusinya adalah:Untuk Docker versi 1.3 atau yang lebih baru: Terima kasih kepada pengguna WiR3D yang menyarankan cara lain untuk mendapatkan shell penampung. Jika kita menggunakan,
attach
kita hanya bisa menggunakan satu instance dari shell. Jadi jika kita ingin membuka terminal baru dengan instance baru dari shell penampung, kita hanya perlu menjalankan yang berikut:atau
sumber
sudo docker attach loving_heisenberg
-i -t
sama dengan-it
docker attach
misalnya, ke instance MongoDB, akan mematikan instance tersebut. Seperti dijelaskan lebih terinci dalam pertanyaan iniattach
danexec
merupakan binatang yang berbeda.Dari Docker 1.3 dan selanjutnya:
Pada dasarnya, jika wadah Docker mulai menggunakan
/bin/bash
perintah Anda dapat mengaksesnya menggunakanattach
. Jika tidak, maka Anda perlu menjalankan perintah untuk membuat instance Bash di dalam wadah menggunakanexec
.Juga untuk keluar dari Bash tanpa membiarkan Bash berjalan dalam proses jahat:
Yap, sesederhana itu.
sumber
RUN
perintah di dockerfile adalah/bin/bash
. Tetapi tergantung apa yang Anda maksud. Jika Anda ingin menjalankan wadah dan memiliki bash segera tersedia di terminal yang sama maka jalankan dengan-it
harus melakukannyasudo
vsdocker
grup. Apa pun itu, ada lubang keamanan yang dibangun ke dalam buruh pelabuhan yang dapat memberikan hak istimewa penuh dalam sistem file host dari tamu - terlepas dari apakah Anda menggunakan grup buruh pelabuhan atausudo
untuk meluncurkan wadah.Meskipun penulis pertanyaan secara khusus mengatakan bahwa mereka tertarik pada sebuah wadah yang sedang berjalan, ada baiknya juga dicatat bahwa jika wadah itu tidak berjalan, tetapi Anda ingin menjalankannya untuk melihat-lihat Anda dapat berlari:
docker run -i -t --entrypoint /bin/bash <imageID>
sumber
Coba ini:
Sumber: https://docs.docker.com/articles/basics/#running-an-interactive-shell
sumber
root@42f1e37bd0e5:/#
root@665b4a1e17b6:/#
Berdasarkan jawaban @ Timur, saya telah membuat skrip praktis berikut
Mempersiapkan
Masukkan
docker-ssh
file Anda$PATH
dengan konten berikutCatatan : Beberapa wadah tidak mengandung
bash
, tetapiash
,sh
dll. Dalam kasus inibash
harus diganti dalam skrip di atas.Pemakaian
Jika Anda hanya memiliki satu instance yang berjalan, jalankan saja
Jika tidak, berikan parameter id buruh pelabuhan yang Anda dapatkan dari
docker ps
(kolom pertama)sumber
Jika wadah Anda belum memasang bash, Anda dapat mencoba sh:
Atau cari dulu kerang di / bin:
sumber
Saya telah membuat server SSH kemas yang menyediakan kemampuan SSH untuk wadah yang berjalan. Anda tidak perlu mengubah wadah Anda. Satu-satunya persyaratan adalah bahwa wadah memiliki bash.
Jika Anda memiliki wadah dengan nama 'web-server1'. Perintah run docker berikut akan memulai container kedua yang akan menyediakan SSH untuk container pertama.
Untuk petunjuk lebih lanjut, checkout https://github.com/jeroenpeeters/docker-ssh
sumber
@jpetazzo memiliki pos yang luar biasa tentang subjek ini . Jawaban singkatnya adalah menggunakan
nsenter
:PS: Jangan lupa cek diskusi di komentar postingan ...
Tepuk tangan
sumber
docker exec
agak lebih nyaman.Anda juga dapat memberi wadah Docker alamat IP yang dapat dirutekan dengan Pipework, dan setelah itu SSH ke dalam mesin dengan alamat IP baru itu.
Ini akan lebih "tradisional" (ssh), daripada menggunakan perintah khusus aplikasi seperti
docker attach
, dan pada akhirnya akan membuatnya lebih 'portabel' di seluruh sistem dan versi.sumber
Terkadang akan berguna untuk ssh ke wadah Docker, terutama selama pengembangan. Gambar Docker berikut memungkinkan untuk ssh ke dalam wadah menggunakan kunci pribadi:
UbuntuWithSSH-Docker
Inti dari Dockerfile adalah https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .
sumber
Ini bekerja :-)
sumber
MASUK KE DALAM
instal
goinside
alat baris perintah dengan:dan masuk ke dalam wadah buruh pelabuhan dengan ukuran terminal yang tepat dengan:
untuk lebih jelasnya lihat ini .
sumber
Untuk menabrak wadah yang sedang berjalan, ketik ini:
sumber
Hanya untuk informasi. Jika Anda perlu masuk dalam wadah sederhana yang bukan daemon, Anda perlu menggunakan perintah berikut:
sumber
jika wadah dihentikan seperti misalnya wadah data saja, maka solusi yang baik adalah dengan menjalankan wadah sekali pakai setiap kali Anda ingin melampirkan ke wadah data. Dalam hal ini wadah data itu sendiri bisa sepenuhnya kosong, karena wadah sementara akan memiliki alat OS.
sumber