Saya memiliki sebuah wadah yang menjalankan layanan Apache di latar depan. Saya ingin dapat mengakses wadah dari shell lain untuk "melihat-lihat" di dalamnya dan memeriksa file. Saat ini, jika saya lampirkan ke wadah, saya dibiarkan menatap daemon Apache dan tidak dapat menjalankan perintah apa pun.
Apakah mungkin untuk menempelkan tty lain ke wadah yang sedang berjalan? Mungkin, saya bisa memanfaatkan fakta bahwa Docker sebenarnya hanya membungkus kontainer LXC? saya telah mencobasudo lxc-console -n [container-id] -t [1-4]
tetapi tampaknya hanya satu tty yang tersedia dan itu adalah yang menjalankan daemon apache. Mungkin ada cara untuk mengaktifkan beberapa konsol lxc selama proses pembuatan?
Saya lebih suka tidak mengkonfigurasi dan membangun wadah dengan layanan openssh jika memungkinkan.
docker attach [conainer-id]
?Jawaban:
Dengan docker 1.3, ada perintah baru
docker exec
. Ini memungkinkan Anda untuk memasuki buruh pelabuhan:sumber
exec
itu tidak bertindak sebagai terminal normal. Misalnya, Anda tidak dapat mengubah pengguna sekali di dalam wadah.su someuser
mengubah pengguna. Menjalankan Docker 1.4.1docker exec -it
pada akhirnya akan memberikan pseudo tty yang berfungsi penuh, tetapi untuk saat ini (Docker versi 1.9.1), ada beberapa kekurangan: github.com/docker/docker/issues/8755Anda harus menggunakan alat Jérôme Petazzoni yang disebut 'nsenter' untuk memasuki sebuah wadah tanpa menggunakan SSH. Lihat: https://github.com/jpetazzo/nsenter
Instal dengan hanya menjalankan:
docker run -v /usr/local/bin:/target jpetazzo/nsenter
Kemudian gunakan perintah
docker-enter <container-id>
untuk memasuki wadah.sumber
docker exec
. Ini memungkinkan Anda untuk memasuki buruh pelabuhan:docker exec -it <container-id> bash
(lihat jawaban saya di bawah)docker-enter
masih ada? Itu memberi sayacommand not found
.Memperbarui
Pada docker 0.9, untuk langkah-langkah di bawah ini untuk sekarang berfungsi, kita sekarang harus memperbarui
/etc/default/docker
file dengan'-e lxc'
opsi startup ke docker daemon sebelum me-restart daemon (saya melakukan ini dengan me-reboot host).Ini semua karena ...
sumber
Harap dicatat bahwa ini akan mencegah fitur opsional hanya host host jaringan docker 0.11 dari "berfungsi" dan Anda hanya akan melihat antarmuka loopback. laporan bug
Ternyata solusi untuk pertanyaan yang berbeda juga merupakan solusi untuk pertanyaan ini:
Pembaruan: Anda akan segera perlu menggunakan
ps --no-trunc
alih-alihps -notrunc
yang sudah usang.Temukan ID kontainer lengkap
Masukkan perintah lxc attach.
Top menunjukkan proses apache saya menjalankan buruh pelabuhan itu dimulai.
sumber
Langkah pertama dapatkan id wadah:
docker ps
Ini akan menunjukkan kepada Anda sesuatu seperti
1170fe9e9460
adalah id wadah dalam hal ini.Kedua , masukkan buruh pelabuhan:
docker exec -it [container_id] bash
jadi dalam kasus di atas:
docker exec -it 1170fe9e9460 bash
sumber
Bagaimana dengan menjalankan Layar tmux / GNU di dalam wadah? Tampaknya cara yang lebih lancar untuk mengakses vty sebanyak yang Anda inginkan dengan sederhana:
sumber
docker attach
dan saya menunjukkan bahwa:...the attach command attaches to the running tty, not a new one, hence the question title is "...with new TTY"
nsenter
apakah itu. Namun saya juga perlu memasukkan wadah dengan cara yang sederhana dan nsenter tidak cukup untuk kebutuhan saya. Itu buggy dalam beberapa kesempatan (layar hitam plus -wd flag tidak berfungsi). Selanjutnya saya ingin masuk sebagai pengguna tertentu dan di direktori tertentu.Saya akhirnya membuat alat sendiri untuk masuk ke wadah. Anda dapat menemukannya di: https://github.com/Pithikos/docker-enter
Penggunaannya semudah
sumber
Cara "nsinit" adalah:
instal nsinit
dari dalam wadah:
dari luar:
Gunakan
sumber
Akan membawa Anda ke konsol wadah.
sumber
sumber
Saya mulai menjalankan PowerShell pada menjalankan microsoft / iis dijalankan sebagai daemon menggunakan
sumber
Pada Windows 10 , saya memiliki buruh pelabuhan diinstal. Saya menjalankan Jnekins pada sebuah wadah dan saya menemukan pesan kesalahan yang sama. Berikut ini adalah panduan langkah demi langkah untuk mengatasi masalah ini:
Langkah 1: Buka gitbash dan jalankan docker run -p 8080: 8080 -p 50000: 50000 jenkins.
Langkah 2: Buka terminal baru.
Langkah 3: Lakukan "buruh pelabuhan ps" untuk mendapatkan daftar wadah berjalan. Salin id wadah.
Langkah 4: Sekarang jika Anda melakukan "docker exec -it {container id} sh" atau "docker exec -it {container id} bash" Anda akan mendapatkan pesan kesalahan yang mirip dengan "perangkat input bukan TTY. Jika Anda menggunakan mintty, coba awali perintah dengan 'winpty' "
Langkah 5: Jalankan perintah " $ winpty docker exec -it {container id} sh "
vola !! Anda sekarang berada di dalam terminal.
sumber