Berikut adalah beberapa metode yang berbeda...
A) Gunakan docker exec (termudah)
Docker versi 1.3 atau lebih baru mendukung perintah exec
yang berperilaku mirip dengan nsenter
. Perintah ini dapat menjalankan proses baru dalam wadah yang sudah berjalan (wadah harus sudah menjalankan proses PID 1). Anda dapat menjalankan /bin/bash
untuk menjelajahi status kontainer:
docker exec -t -i mycontainer /bin/bash
lihat dokumentasi baris perintah Docker
B) Gunakan Pemotretan
Anda dapat mengevaluasi sistem file kontainer dengan cara ini:
# find ID of your running container:
docker ps
# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot
# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash
Dengan cara ini, Anda dapat mengevaluasi sistem file dari wadah yang sedang berjalan pada saat yang tepat. Penampung masih berjalan, tidak ada perubahan di masa mendatang yang disertakan.
Anda nanti dapat menghapus snapshot menggunakan (sistem file dari wadah yang berjalan tidak terpengaruh!):
docker rmi mysnapshot
C) Gunakan ssh
Jika Anda memerlukan akses berkelanjutan, Anda dapat menginstal sshd ke wadah Anda dan menjalankan daemon sshd:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
# you need to find out which port to connect:
docker ps
Dengan cara ini, Anda dapat menjalankan aplikasi menggunakan ssh (hubungkan dan jalankan apa yang Anda inginkan).
D) Gunakan nsenter
Gunakan nsenter
, lihat Mengapa Anda tidak perlu menjalankan SSHd di wadah Docker Anda
Versi singkatnya adalah:dengan nsenter, Anda bisa memasukkan shell ke dalam container yang sudah ada, bahkan jika container tersebut tidak menjalankan SSH atau jenis daemon tujuan khusus apa pun
PEMBARUAN:MENJELAJAHI!
Perintah ini akan memungkinkan Anda menjelajahi wadah buruh pelabuhan yang sedang berjalan :
docker exec -it name-of-container bash
Setara untuk ini dalam docker-compose adalah:
docker-compose exec web bash
(web adalah nama layanan dalam hal ini dan memiliki tty secara default.)
Setelah Anda berada di dalam, lakukan:
ls -lsa
atau perintah bash lainnya seperti:
cd ..
Perintah ini akan memungkinkan Anda menjelajahi citra buruh pelabuhan :
docker run --rm -it --entrypoint=/bin/bash name-of-image
sekali di dalam lakukan:
ls -lsa
atau perintah bash lainnya seperti:
cd ..
-it
adalah singkatan dari interactive... dan tty.
Perintah ini akan memungkinkan Anda memeriksa wadah atau gambar buruh pelabuhan yang sedang berjalan :
docker inspect name-of-container-or-image
Anda mungkin ingin melakukan ini dan mencari tahu apakah ada bash
atau sh
di sana. Cari entrypoint atau cmd di pengembalian json.
CATATAN: Jawaban ini bergantung pada alat commen yang ada, tetapi jika tidak ada bash
shell atau alat umum seperti ls
sekarang Anda dapat menambahkannya terlebih dahulu di lapisan jika Anda memiliki akses ke Dockerfile
:contoh untuk alpine:
RUN apk add --no-cache bash
Jika tidak, jika Anda tidak memiliki akses ke Dockerfile
lalu cukup salin file dari wadah yang baru dibuat dan lihat melaluinya dengan melakukan:
docker create <image> # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah
lihat dokumentasi docker exec
lihat docker-compose dokumentasi exec
lihat docker memeriksa dokumentasi
lihat buruh pelabuhan membuat dokumentasi
Seandainya wadah Anda dihentikan atau tidak memiliki cangkang (mis. hello-world
disebutkan dalam panduan instalasi, atau non-alpine
traefik
), ini mungkin satu-satunya metode yang mungkin untuk menjelajahi sistem file.
Anda dapat mengarsipkan sistem file penampung Anda ke dalam file tar:
docker export adoring_kowalevski > contents.tar
Atau daftarkan file:
docker export adoring_kowalevski | tar t
Perhatikan, bahwa bergantung pada gambarnya, mungkin perlu waktu dan ruang disk.