GNU/Linux >> Belajar Linux >  >> Linux

Menjelajahi sistem file kontainer Docker

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.


Linux
  1. Superblock, Inode, Dentry, dan File?

  2. Bagaimana Cara Cat File Dari Awk?

  3. Ekstrak File Dari Gambar Docker?

  1. Katakan saja tidak untuk root (dalam wadah)

  2. Cara Memasang atau Menghubungkan Satu File di Wadah Docker

  3. Bagaimana cara mengarahkan output dari system() ke file?

  1. Beberapa Perintah DOCKER

  2. Pengantar Docker

  3. Sistem file lintas platform