Inspect

Membaca metadata container: alamat IP, mount, state, dan filter query pada keluaran JSON.

Daftar isi

Topik ini membahas inspect, yaitu pemeriksaan detail terhadap sebuah container. Perintah docker inspect menampilkan metadata lengkap dalam bentuk JSON. Pembahasan mencakup struktur keluarannya, bidang yang paling sering dibutuhkan saat diagnosis, serta penyaringan keluaran dengan --format. Setelah membacanya, keadaan, alamat IP, daftar mount, dan asal-usul sebuah container dapat dibaca tanpa menebak.

Metadata container dalam JSON#

docker inspect nama-container mengembalikan satu objek JSON yang memuat hampir seluruh informasi yang diketahui daemon, proses latar belakang Docker, tentang container itu. JSON, format teks berstruktur yang mudah dibaca mesin, menyusunnya sebagai kumpulan bidang bertingkat. Isinya meliputi konfigurasi saat container dibuat, keadaan saat ini, jaringan, mount, sampai penanda waktu. Beberapa container dapat diperiksa dalam satu pemanggilan, dan keluarannya berupa satu objek untuk masing-masing container.

bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# tampilkan metadata lengkap container aplikasi catatan
docker inspect catatan-app

Keluarannya panjang, biasanya ratusan baris, karena semuanya direkam sejak container dibuat. Struktur terpentingnya terkumpul pada beberapa kelompok besar. Bagian State memuat keadaan berjalan container, NetworkSettings memuat jaringan, Mounts memuat daftar volume dan bind mount, yaitu direktori host yang dipetakan langsung, sedangkan Config memuat konfigurasi yang diwarisi dari image beserta penggantiannya.

Perintah ini dipanggil saat diagnosis karena keluarannya memuat keadaan yang tidak terlihat dari luar. Container yang langsung berhenti menyimpan kode keluar dan penyebabnya pada bagian State, container yang tidak dapat dihubungi menyimpan alamatnya pada bagian NetworkSettings, dan opsi docker run yang salah ketik terbaca apa adanya pada bagian Config. Semuanya terbaca meskipun container sudah berhenti, karena metadata tetap disimpan sampai container dihapus.

Metadata yang ditampilkan berupa potret, bukan aliran langsung. Nilai yang terbaca adalah keadaan pada saat perintah dipanggil, sehingga perubahan yang berlangsung cepat diamati dengan docker stats atau log. Ketiganya saling melengkapi pada diagnosis, yaitu stats untuk angka pemakaian, log untuk pesan aplikasi, dan inspect untuk konfigurasi serta keadaan yang tersimpan.

Bidang yang sering dibutuhkan#

Bidang JSON dialamatkan dengan tanda titik dari akar objek, sehingga .State.Status berarti bidang Status di dalam objek State. Bidang-bidang berikut menjawab pertanyaan yang paling sering muncul saat diagnosis.

BidangIsi
.State.StatusKeadaan container, misalnya created, running, paused, atau exited
.State.ExitCodeKode keluar yang ditinggalkan proses utama saat berakhir
.State.OOMKilledPenanda true apabila proses utama dihentikan kernel karena kehabisan memori
.NetworkSettings.IPAddressAlamat IP container pada jaringan bridge
.MountsDaftar volume dan bind mount beserta titik pemasangannya
.Config.ImageNama image yang dipakai membuat container
.State.StartedAtPenanda waktu terakhir container dijalankan
.RestartCountJumlah percobaan restart yang dilakukan sesuai kebijakan restart
.CreatedPenanda waktu pembuatan container

Nilai .State.Status mengikuti siklus hidup container. Nilai exited, yaitu keadaan proses utama yang sudah berakhir, muncul pada container yang berhenti, sedangkan running menandakan container masih hidup. Pasangan .State.ExitCode dan .State.OOMKilled melengkapi gambaran tersebut. Kode keluar (exit code), yaitu nilai yang ditinggalkan proses ketika berakhir, menyatakan bagaimana proses tamat. Penanda OOM, singkatan dari out of memory, menunjuk penyebab berupa kehabisan memori yang membuat kernel menghentikan proses.

Bidang Mounts memuat setiap pemasangan penyimpanan beserta sumber dan tujuannya, sehingga asal-usul data container dapat dilacak dari sini. Bidang Created dan Config.Image menjawab pertanyaan kapan serta dari apa sebuah container dibuat, yang sering dibutuhkan ketika mendiagnosis container buatan orang lain atau buatan skrip. Pasangan .State.StartedAt dan .RestartCount berguna pada kegagalan yang berulang, karena pola container yang berhenti dan dijalankan ulang terbaca dari keduanya tanpa perlu mengamati langsung.

Menyaring keluaran dengan –format#

Membaca ratusan baris JSON untuk satu nilai jelas boros. Opsi --format menyaring keluaran menggunakan Go template, bahasa templat bawaan Go yang dipakai Docker untuk memformat keluaran. Templatnya ditulis langsung pada perintah, dan Docker mengganti setiap bidang dengan nilainya sebelum menampilkan hasilnya.

bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# tampilkan hanya keadaan container
docker inspect --format '{{.State.Status}}' catatan-app
# tampilkan kode keluar proses utamanya
docker inspect --format '{{.State.ExitCode}}' catatan-app
# tampilkan penanda OOM
docker inspect --format '{{.State.OOMKilled}}' catatan-app
# tampilkan alamat IP container yang berjalan
docker inspect --format '{{.NetworkSettings.IPAddress}}' catatan-app

Setiap pemanggilan di atas menampilkan satu baris berisi satu nilai, misalnya running untuk keadaan atau false untuk penanda OOM. Bidang bertingkat yang berupa daftar, seperti Mounts, tetap dapat ditampilkan utuh dengan fungsi json, yaitu {{json .Mounts}}, sehingga hasilnya dapat diolah oleh alat pengolah JSON.

Opsi --size menambahkan dua bidang ukuran pada keluaran. Bidang SizeRw menyatakan besarnya lapisan tulis yang dibuat container, sedangkan SizeRootFs menyatakan total ukuran image ditambah lapisan tulisnya. Keduanya berguna untuk memeriksa dugaan bahwa container menghabiskan disk melalui berkas yang ditulisnya. Bidang tambahan ini hanya muncul pada pemanggilan yang menggunakan opsi tersebut, sehingga keluaran biasa tetap ringkas.

Ringkasan#

  • docker inspect mengembalikan metadata container sebagai objek JSON yang memuat state, jaringan, mount, dan konfigurasinya.
  • Bidang dialamatkan dengan tanda titik, misalnya .State.Status untuk keadaan dan .NetworkSettings.IPAddress untuk alamat IP yang hanya terisi saat container berjalan.
  • Opsi --format menyaring keluaran menjadi satu nilai melalui Go template, dengan fungsi json untuk menampilkan bidang bertingkat utuh.
  • Opsi --size menambahkan ukuran lapisan tulis dan total ukuran image pada keluaran.

Referensi#