Saya mulai bekerja dengan Docker. Saya menggunakan gambar dasar WordPress dan komposisi buruh pelabuhan.
Saya mencoba ssh ke salah satu wadah untuk memeriksa file / direktori yang dibuat pada awal pembuatan. Saya mencoba lari docker-compose run containername ls -la
, tetapi itu tidak melakukan apa-apa. Bahkan jika itu terjadi, saya lebih suka memiliki konsol di mana saya dapat melintasi struktur direktori, daripada menjalankan satu perintah. Apa cara yang tepat untuk melakukan ini dengan Docker?
docker
docker-container
Andrew
sumber
sumber
docker exec
askubuntu.com/a/543057/35816 . Dapatkan id wadah menggunakandocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
membawa Anda ke wadah secara interaktif. Kemudian orang dapat memeriksa sistem file dalam wadah menggunakancd <path>
Jawaban:
docker attach
akan memungkinkan Anda terhubung ke wadah Docker Anda, tetapi ini tidak benar-benar sama denganssh
. Jika wadah Anda menjalankan server web, misalnya,docker attach
mungkin akan menghubungkan Anda ke stdout dari proses server web. Itu tidak akan selalu memberi Anda shell.The
docker exec
perintah mungkin apa yang Anda cari; ini akan memungkinkan Anda menjalankan perintah sewenang-wenang di dalam wadah yang ada. Sebagai contoh:Tentu saja, perintah apa pun yang Anda jalankan harus ada di sistem file wadah.
Dalam perintah di atas
<mycontainer>
adalah nama atau ID wadah target. Tidak masalah apakah Anda menggunakan atau tidakdocker compose
; jalankandocker ps
dan gunakan ID (string heksadesimal yang ditampilkan di kolom pertama) atau nama (ditampilkan di kolom terakhir). Misalnya, diberikan:Saya bisa berlari:
Saya bisa mencapai hal yang sama dengan menjalankan:
Demikian pula, saya dapat memulai sebuah shell di wadah;
sumber
docker exec
hanya berfungsi pada wadah yang sedang berjalan (jika tidak gunakandocker run -it --entrypoint /bin/bash
atau serupa).-it
merupakan kombinasi dari-i
dan-t
yang masing-masing--interactive
("Biarkan STDIN tetap terbuka meskipun tidak terpasang")--tty
("Alokasikan pseudo-TTY").docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, hanya untuk memperjelas orang--any --more --args
Anda miliki akan dimasukkan ke dalam gambar apa pun yang telah didefinisikan sebagaiCMD
dan bukan Docker (atau jika gambar Anda hanya menentukanENTRYPOINT
dan tidakCMD
, maka opsi ini akan dimasukkan/bin/bash
seperti yang telah Anda tentukan di sini ). Jadi misalnyadocker run
opsi lain (misalnya--net "host"
) harus pergi sebelum<imageid>
.Untuk menabrak wadah yang sedang berjalan, ketikkan ini:
atau
atau
sumber
docker exec -it
daripadadocker exec -t -i
Katakanlah, karena alasan Anda sendiri, Anda benar-benar ingin menggunakan SSH. Dibutuhkan beberapa langkah, tetapi bisa dilakukan. Berikut adalah perintah yang akan Anda jalankan di dalam wadah untuk mengaturnya ...
Sekarang Anda bahkan dapat menjalankan aplikasi grafis (jika diinstal di wadah) menggunakan penerusan X11 ke klien SSH:
Berikut ini beberapa sumber terkait:
sumber
Jika Anda di sini mencari Docker Compose-spesifik jawaban seperti saya, itu memberikan cara mudah tanpa harus mencari ID kontainer yang dihasilkan.
docker-compose exec
mengambil nama layanan sesuaidocker-compose.yml
file Anda .Jadi untuk mendapatkan shell Bash untuk layanan 'web' Anda, Anda dapat melakukan:
sumber
docker-compose run
berfungsi juga, jika wadah Anda belum ada.Perhatikan : jawaban ini mempromosikan alat yang saya tulis.
Saya telah membuat server SSH kemas yang dapat Anda 'tempelkan' ke wadah yang sedang berjalan. Dengan cara ini Anda dapat membuat komposisi dengan setiap wadah. Satu-satunya persyaratan adalah bahwa wadah tersebut memiliki Bash.
Contoh berikut akan memulai server SSH yang terpasang pada sebuah wadah dengan nama 'wadah-saya'.
Saat Anda terhubung ke layanan SSH ini (dengan klien SSH pilihan Anda), sesi Bash akan dimulai dalam wadah dengan nama 'wadah-saya'.
Untuk petunjuk dan dokumentasi lebih lanjut, lihat: https://github.com/jeroenpeeters/docker-ssh
sumber
less
menunjukkan peringatan setiap kali saya menjalankannya dll. Menggunakan wadah Jeroen memberi saya pengalaman yang jauh lebih baik sejauh ini. Pastikan untuk memeriksa dokumentasinya . Perintah sampel dalam respons tampaknya tidak valid lagi.Jika Anda menggunakan Docker di Windows dan ingin mendapatkan akses shell ke sebuah wadah, gunakan ini:
Kemungkinan besar, Anda sudah menginstal Git Bash . Jika tidak, pastikan untuk menginstalnya.
sumber
Jika wadah sudah keluar (mungkin karena kesalahan), Anda bisa melakukannya
atau
atau
untuk membuat wadah baru dan memasukkan shell ke dalamnya. Karena Anda menentukan --rm, wadah akan dihapus ketika Anda keluar dari shell.
sumber
Dalam beberapa kasus, gambar Anda dapat berbasis Alpine. Dalam hal ini ia akan melempar:
Karena
/bin/bash
tidak ada. Alih-alih ini, Anda harus menggunakan:atau
sumber
SSH ke dalam wadah Docker menggunakan perintah ini:
sumber
Untuk terhubung ke cmd dalam wadah Windows, gunakan
Di mana d8c25fde2769 adalah id wadah.
sumber
Itu sederhana !
Buat daftar semua gambar Docker Anda:
Pada sistem saya itu menunjukkan output berikut:
Saya memiliki dua gambar Docker di PC saya. Katakanlah saya ingin menjalankan yang pertama.
Ini akan memberi Anda kontrol terminal wadah. Sekarang Anda dapat melakukan semua jenis operasi shell di dalam wadah. Seperti melakukan
ls
akan menampilkan semua folder di root dari sistem file.sumber
Untuk memeriksa file, jalankan
docker run -it <image> /bin/sh
untuk mendapatkan terminal interaktif. Daftar gambar dapat diperoleh dengandocker images
. Berbeda dengandocker exec
solusi ini juga berfungsi jika gambar tidak mulai (atau berhenti segera setelah berjalan).sumber
SOLUSI GOINSIDE
instal
goinside
alat baris perintah dengan:dan masuk ke dalam wadah buruh pelabuhan dengan ukuran terminal yang tepat dengan:
jawaban lama
Kami telah memasukkan cuplikan ini
~/.profile
:Hal ini tidak hanya membuat semua orang bisa masuk ke dalam wadah berlari dengan:
Ini juga memecahkan masalah berumur panjang tentang ukuran terminal kontainer Docker tetap . Yang sangat menjengkelkan jika kamu menghadapinya.
Juga jika Anda mengikuti tautan Anda akan memiliki perintah selesai untuk nama kontainer buruh pelabuhan Anda juga.
sumber
Atau tergantung pada shell, bisa jadi
Anda bisa mendapatkan id kontainer melalui
docker ps
perintah-i
= interaktif-t
= untuk mengalokasikan psuedo-TTYsumber
Saya telah membuat fungsi terminal untuk memudahkan akses ke terminal kontainer. Mungkin ini berguna bagi kalian juga:
Jadi hasilnya, alih-alih mengetik:
Anda akan menulis:
Masukkan yang berikut ini di ~ / .bash_profile Anda (atau apa pun yang cocok untuk Anda), lalu buka jendela terminal baru dan nikmati pintasannya:
sumber
Anda dapat berinteraksi dengan terminal dalam wadah buruh pelabuhan dengan melewatkan opsi -ti
-t singkatan terminal -i singkatan interaktif
sumber
docker exec
pasti akan menjadi solusi. Cara mudah untuk bekerja dengan pertanyaan yang Anda ajukan adalah dengan memasang direktori di dalam Docker ke direktori sistem lokal .Sehingga Anda dapat melihat perubahan di jalur lokal secara instan.
sumber
Menggunakan:
Cara lain, meskipun ada bahaya untuk itu, adalah menggunakan
attach
, tetapi jika Anda Ctrl+ Ckeluar dari sesi, Anda juga akan menghentikan wadah. Jika Anda hanya ingin melihat apa yang terjadi, gunakandocker logs -f
.sumber
Gunakan perintah ini:
sumber
Jika Anda memiliki Docker terpasang
Kitematic
, Anda dapat menggunakan GUI. BukaKitematic
dari ikon Docker dan diKitematic
jendela pilih wadah Anda, lalu klikexec
ikon.Anda dapat melihat log kontainer dan banyak informasi kontainer (di tab pengaturan) di GUI ini juga.
sumber
Dalam kasus saya, untuk beberapa alasan saya perlu memeriksa semua informasi jaringan yang terlibat dalam setiap wadah. Jadi perintah berikut harus valid dalam sebuah wadah ...
Saya memeriksa semua jawaban ini, tidak ada yang membantu saya. Saya telah mencari informasi di situs web lain. Saya tidak akan menambahkan tautan super di sini, karena ini tidak ditulis dalam bahasa Inggris. Jadi saya hanya memasang posting ini dengan solusi ringkasan untuk orang-orang yang memiliki persyaratan yang sama dengan saya.
Katakanlah Anda memiliki satu wadah berjalan bernama uji-cahaya. Ikuti langkah-langkah di bawah ini.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. Perintah ini akan mendapat balasan seperti/var/run/docker/netns/xxxx
.ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. Direktori mungkin tidak ada, lakukanmkdir /var/run/netns
dulu.ip netns exec xxxx ip addr show
untuk menjelajahi dunia jaringan dalam wadah.PS.
xxxx
selalu nilai yang sama yang diterima dari perintah pertama. Dan tentu saja, perintah lain yang valid, yaituip netns exec xxxx netstat -antp|grep 8080
.sumber
Pilihan lain adalah menggunakan nsenter .
sumber
nsenter
. Yang pertama adalah bahwa Anda harus memiliki akses fisik ke host buruh pelabuhan, yang bukan diberikan (Anda mungkin bekerja dengan API buruh pelabuhan jarak jauh). Juga, menjalankan di bawahnsenter
membebaskan Anda dari beberapa pembatasan keamanan dan sumber daya yang diberlakukan Docker (yang bisa pro atau kontra, tergantung pada lingkungan Anda).docker exec
hari ini.docker exec
.docker exec
terlihat lebih elegan bagiku.Jika Anda menggunakan Docker Compose maka ini akan membawa Anda ke dalam wadah Docker.
Di dalam wadah itu akan membawa Anda ke WORKDIR yang ditentukan di Dockerfile. Anda dapat mengubah direktori kerja Anda dengan
sumber
Untuk mengeksekusi ke wadah berjalan bernama
test
, di bawah ini adalah perintah berikutJika wadah memiliki
bash
cangkangJika wadah memiliki
bourne
cangkang dan sebagian besar kasing adasumber
Untuk docker-compose up (Docker4Drupal)
Saya menggunakan Docker untuk Drupal di laptop Linux. Setelah menjalankan wadah saya menggunakan '
docker-compose exec php bash
' untuk terhubung dengan wadah sehingga saya dapat menjalankan komando drush. Ini bekerja dengan baik untuk saya.sumber