Bagaimana aku bisa masuk kontainer Docker's shell?

I'm memulai bekerja dengan Docker. I'm menggunakan WordPress gambar dasar dan docker-menulis.

I'm mencoba untuk ssh ke salah satu wadah untuk memeriksa file/direktori yang dibuat selama awal membangun. Saya mencoba untuk menjalankan docker-menulis menjalankan containername ls -la, tapi itu tidak't melakukan apa-apa. Bahkan jika itu terjadi, aku'd suka memiliki konsol di mana saya dapat melintasi struktur direktori, daripada menjalankan satu perintah. Apa cara yang tepat untuk melakukan hal ini dengan Docker?

Mengomentari pertanyaan (3)
Larutan

docker melampirkan akan memungkinkan anda terhubung ke anda Docker container, tapi ini isn't benar-benar hal yang sama seperti ssh. Jika anda container menjalankan webserver, misalnya, docker melampirkan mungkin akan menghubungkan anda ke stdout web server proses. Itu tidak't selalu memberikan anda sebuah shell.

The docker exec perintah ini mungkin apa yang anda cari, ini akan membiarkan anda menjalankan perintah sewenang-wenang yang ada di dalam wadah. Misalnya:

docker exec -it  bash

Tentu saja, apapun perintah yang anda jalankan harus ada dalam wadah filesystem.

Perintah di atas <mycontainer> adalah nama atau ID target wadah. Itu doesn't peduli apakah atau tidak anda're menggunakan docker menulis; hanya menjalankan docker ps dan menggunakan salah satu ID (string heksadesimal ditampilkan di kolom pertama) atau nama (ditampilkan dalam kolom terakhir). E. g., mengingat:

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web                 

Saya dapat menjalankan:

$ docker exec -it web ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
18: eth0:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
       valid_lft forever preferred_lft forever

Aku bisa mencapai hal yang sama dengan menjalankan:

$ docker exec -it d2d4a89aaee9 ip addr

Demikian pula, saya bisa memulai shell dalam wadah;

$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$
Komentar (8)

Untuk bash dalam menjalankan wadah, ketik ini:

docker exec -t -i container_name /bin/bash
Komentar (6)

Let's mengatakan, untuk alasan yang tidak anda sendiri, anda benar-benar ingin menggunakan SSH. Dibutuhkan beberapa langkah, tapi itu bisa dilakukan. Berikut ini adalah perintah-perintah yang akan anda jalankan dalam wadah untuk mengatur itu...

apt-get update
apt-get install openssh-server

mkdir /var/run/sshd
chmod 0755 /var/run/sshd
/usr/sbin/sshd

useradd --create-home --shell /bin/bash --groups sudo username ## includes 'sudo'
passwd username ## Enter a password

apt-get install x11-apps ## X11 demo applications (optional)
ifconfig | awk '/inet addr/{print substr($2,6)}' ## Display IP address (optional)

Sekarang anda bahkan dapat menjalankan aplikasi grafis (jika mereka dipasang di dalam wadah) menggunakan X11 forwarding untuk SSH client:

ssh -X username@IPADDRESS
xeyes ## run an X11 demo app in the client

Berikut ini adalah beberapa sumber daya terkait:

Komentar (0)

Pemberitahuan: ini jawaban mempromosikan alat I've tertulis.

I've menciptakan kemas SSH server yang dapat anda 'stick' untuk setiap kontainer. Dengan cara ini anda dapat membuat komposisi dengan setiap wadah. Satu-satunya persyaratan adalah bahwa wadah yang telah Bash.

Contoh berikut akan start SSH server yang terpasang ke sebuah wadah dengan nama 'saya-wadah'.

docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

ssh localhost -p 2222

Ketika anda terhubung ke SSH ini layanan (dengan SSH client pilihan) Bash sesi akan dimulai dalam wadah dengan nama 'saya-wadah'.

Untuk petunjuk lebih lanjut dan dokumentasi melihat: https://github.com/jeroenpeeters/docker-ssh

Komentar (2)

Jika anda're sini mencari Docker Menulis-jawaban tertentu seperti aku, ia menyediakan cara yang mudah tanpa harus mencari dihasilkan container ID.

docker-menulis exec mengambil nama layanan sesuai docker-menulis.yml file.

Jadi untuk mendapatkan Bash shell untuk anda 'web' layanan, yang dapat anda lakukan:

$ docker-compose exec web bash
Komentar (0)

Jika anda're menggunakan Docker pada Windows dan ingin mendapatkan akses shell ke wadah, gunakan ini:

winpty docker exec -it  sh

Kemungkinan besar, anda sudah memiliki Git Bash diinstal. Jika anda don't, pastikan untuk menginstalnya.

Komentar (1)

SSH ke wadah Docker menggunakan perintah ini:

sudo docker exec -i -t (container ID) bash
Komentar (0)

Dalam beberapa kasus gambar anda dapat Alpine berbasis. Dalam hal ini akan membuang:

OCI runtime. exec gagal: exec gagal: container_linux.pergi:348: mulai wadah proses yang disebabkan "exec: \"bash\": eksekusi file tidak ditemukan dalam $PATH": tidak diketahui

Karena /bin/bash doesn't ada. Bukannya ini harus anda gunakan:

docker exec -it 9f7d99aa6625 ash

atau

docker exec -it 9f7d99aa6625 sh
Komentar (0)

Jika wadah sudah keluar (mungkin karena beberapa kesalahan), yang dapat anda lakukan

$ docker run --rm -it --entrypoint /bin/ash image_name

atau

$ docker run --rm -it --entrypoint /bin/sh image_name

atau

$ docker run --rm -it --entrypoint /bin/bash image_name

untuk membuat sebuah wadah baru dan mendapatkan shell ke dalamnya. Karena anda ditentukan --rm, wadah akan dihapus ketika anda keluar dari shell.

Komentar (0)

Untuk terhubung ke cmd di Windows wadah, gunakan

docker exec -it d8c25fde2769 cmd

Dimana d8c25fde2769 adalah id wadah.

Komentar (0)

GOINSIDE SOLUSI

install goinside command line tool dengan:

sudo npm install -g goinside

dan masuk ke dalam wadah docker dengan tepat ukuran terminal dengan:

goinside docker_container_name

tua menjawab

Kami've menempatkan potongan ini di ~/.profil:

goinside(){
    docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
export -f goinside

Hal ini tidak hanya membuat semua orang bisa mendapatkan dalam menjalankan wadah dengan:

goinside containername

Hal ini juga memecahkan lama tinggal tentang masalah tetap Docker container terminal ukuran. Yang sangat menjengkelkan jika anda menghadapi hal ini.

Juga jika anda mengikuti link anda'll memiliki perintah penyelesaian untuk docker container nama juga.

Komentar (1)

Sederhana!

Daftar keluar semua gambar Docker:

sudo docker images

Pada sistem saya itu menunjukkan output sebagai berikut:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bash                latest              922b9cc3ea5e        9 hours ago
14.03 MB
ubuntu              latest              7feff7652c69        5 weeks ago         81.15 MB

Saya memiliki dua Docker gambar pada PC saya. Let's mengatakan saya ingin menjalankan pertama.

sudo docker run -i -t ubuntu:latest /bin/bash

Ini akan memberikan anda terminal kontrol dari kontainernya. Sekarang anda dapat melakukan semua jenis shell operasi di dalam wadah. Seperti melakukan ls akan menampilkan semua folder di root file sistem.

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
Komentar (0)

Gunakan:

docker attach 

Cara lain, meskipun ada bahaya untuk itu, adalah dengan menggunakan pasang, tetapi jika anda Pilih + C untuk keluar dari sesi ini, anda juga akan berhenti wadah. Jika anda hanya ingin melihat apa yang terjadi, gunakan docker log -f.

:~$ docker attach --help
Usage:  docker attach [OPTIONS] CONTAINER

Attach to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --help                 Print usage
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)
Komentar (0)

Gunakan perintah ini:

docker exec -it containerid /bin/bash
Komentar (0)

Untuk memeriksa file, jalankan docker run-it <gambar> /bin/bash untuk mendapatkan interaktif terminal. Daftar gambar dapat diperoleh dengan gambar docker. Dalam bertentangan dengan docker exec solusi ini bekerja juga dalam kasus ketika sebuah gambar doesn't start (atau berhenti segera setelah menjalankan).

Komentar (1)

docker exec pasti akan menjadi solusi. Cara mudah untuk bekerja dengan pertanyaan yang anda tanya adalah dengan mounting direktori di dalam Docker untuk sistem lokal's direktori.

Sehingga anda bisa melihat perubahan dalam jalan lokal langsung.


docker run -v /Users/<path>:/
Komentar (2)
$ docker exec -it  /bin/bash

Atau tergantung pada shell, dapat

$ docker exec -it  /bin/sh

Anda bisa mendapatkan wadah-Id melalui docker ps perintah

-i = interaktif

-t = untuk mengalokasikan psuedo-TTY

Komentar (0)

anda dapat berinteraksi dengan terminal di docker container dengan melewati opsi -ti

docker run --rm -ti 
eg: docker run --rm -ti ubuntu

-t adalah singkatan dari terminal aku berdiri untuk interaktif

Komentar (0)

Jika anda memiliki Docker diinstal dengan Kitematic, anda dapat menggunakan GUI. Buka Kitematic dari Docker ikon dan di Kitematic jendela pilih wadah, dan kemudian klik pada exec icon.

Anda dapat melihat wadah log dan banyak wadah informasi (di tab settings) di GUI ini juga.

Komentar (0)

I've menciptakan fungsi terminal untuk akses yang lebih mudah ke wadah's terminal. Mungkin itu's berguna untuk kalian juga:

Sehingga hasilnya, bukan mengetik:

docker exec -it [container_id] /bin/bash

anda'll menulis:

dbash [container_id]

Masukan kode berikut ke dalam file ~/.bash_profile (atau apa pun yang bekerja untuk anda), kemudian buka jendela terminal baru dan menikmati shortcut:

#usage: dbash [container_id]
dbash() {
    docker exec -it "$1" /bin/bash
}
Komentar (0)