Sepanjang Section ini kita berulang kali menjalankan docker network inspect lalu buru-buru memotong keluarannya karena fokus kita ada pada IP dan nama container saja. Padahal dokumen JSON yang dikembalikan perintah itu adalah sumber kebenaran lengkap sebuah jaringan: rentang subnet yang dipilih daemon, gateway yang menjadi pintu keluar, driver yang dipakai, sampai daftar seluruh penghuni beserta alamat MAC-nya. Ketika koneksi antar container berperilaku aneh — misalnya dua service yang seharusnya berdekatan ternyata tidak saling menyelesaikan nama — dokumen inilah tempat pertama yang harus dibaca sebelum menebak-nebak. Pada chapter ini kita membedah keluaran lengkapnya blok demi blok, membandingkannya dengan Options milik default bridge dari chapter Bridge Network, lalu mengerucutkannya menjadi perintah ekstraksi satu baris yang siap dipakai skrip.
Kita lanjutkan latihan net-latihan dari chapter Komunikasi Antar Container: satu jaringan user-defined berisi tiga container — web (nginx di 172.19.0.2), db (postgres di 172.19.0.3), dan app (alpine di 172.19.0.4). Keluaran berikut dipotong hanya pada bagian array agar tetap nyaman dibaca; struktur lengkapnya persis seperti ini.
docker network inspect net-latihanOutput yang Dihasilkan:
[
{
"Name": "net-latihan",
"Id": "1f4a9c2d8b7e6a3f5c0d9e2a4b6c8d0f3a5b7e9c1d3f5a2b4e6c8d0f2a4b6c8e",
"Created": "2026-10-13T19:12:47.928391211Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"7e2b9d4a1c6f3a5b7d9e2c4a6b8d0f2a4c6e8b0d2f4a6c8e0b2d4f6a8c0e2b4d": {
"Name": "app",
"EndpointID": "5c8d0f2a4b6c8e1d3f5a7b9c0e2d4f6a8b0d2c4e6f8a0b2d4f6a8c0e2b4d6f",
"MacAddress": "02:42:ac:13:00:04",
"IPv4Address": "172.19.0.4/16",
"IPv6Address": ""
},
"a4c6e8b0d2f4a6c8e0b2d4f6a8c0e2b4d6f8a0b2d4f6a8c0e2b4d6f8a0b2d4f6": {
"Name": "db",
"EndpointID": "9e2d4f6a8b0d2c4e6f8a0b2d4f6a8c0e2b4d6f8a0b2d4f6a8c0e2b4d6f8a",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"d2f4a6c8e0b2d4f6a8c0e2b4d6f8a0b2d4f6a8c0e2b4d6f8a0b2d4f6a8c0e": {
"Name": "web",
"EndpointID": "b4d6f8a0b2d4f6a8c0e2b4d6f8a0b2d4f6a8c0e2b4d6f8a0b2d4f6a8c0e2",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]Mari kita telaah blok-blok JSON di atas satu per satu:
NamedanId: nama jaringan yang kita berikan saatdocker network create, dan identitas internal berupa hash 64 heksadesimal — pola yang sama dengan ID container dan digest image yang sering kita temui sepanjang Course. KolomIdinilah yang diringkas menjadiNETWORK IDpendek padadocker network ls.Created: waktu jaringan dibuat, dalam format UTC ISO-8601 dengan presisi nanodetik. Waktu ini berguna saat merekonstruksi kronologi insiden — misalnya memastikan jaringan dibuat ulang tepat sebelum service mulai gagal terhubung.Scope: "local"danDriver: "bridge": jaringan ini hanya dikenal daemon setempat dan diimplementasikan sebagai bridge Linux. NilaiScopeberubah menjadi"swarm"pada jaringan overlay lintas host — pembahasan yang menunggu di Section Orchestration dan Ekosistem.IPAM(IP Address Management): blok yang menjawab “dari mana alamat IP berasal”.Driver: "default"berarti alokasi ditangani daemon sendiri,Configmemuat subnet172.19.0.0/16yang dialokasikan otomatis dari pool berurutan (setelah172.17milik docker0 dan172.18miliknet-aplikasidari chapter Membuat Custom Network), danGateway 172.19.0.1adalah alamat bridge yang menjadi pintu keluar ke host — alamat yang kita pakai sebagai tujuan ping di chapter Komunikasi Antar Container.Containers: kamus penghuni jaringan, dengan ID container penuh sebagai kunci. Setiap penghuni membawaName(nama yang bisa diselesaikan DNS),EndpointID(identitas sambungan veth),MacAddressdalam pola02:42:ac:13:00:0Xyang kita bedah di chapter Bridge Network (awalan02:42+ subnet dalam heksadesimal), danIPv4Address. Perhatikan bahwa kamus ini diurutkan berdasarkan ID, bukan nama —apptampil lebih dulu meskiwebdibuat lebih awal.Options: kamus opsi driver. Pada jaringan buatan kita kamus ini kosong; bandingkan dengan default bridge yang memuatcom.docker.network.bridge.name: docker0beserta opsienable-ip-masquerade— itulah yang membuat NAT bekerja otomatis sejak chapter pertama Section ini.Labels: label yang bisa ditempelkan saat pembuatan (docker network create --label env=prod) — kebiasaan yang sama dengan label volume produksi dari chapter Persistent Storage Production.
Ekstraksi dengan –format #
Dokumen penuh bagus untuk dibaca manusia, tetapi skrip hanya butuh satu potong informasi. Flag --format dengan Go template — pola yang sudah kita kenal dari chapter Docker Inspect — memungkinkan kita mengupas JSON tersebut menjadi daftar ringkas:
docker network inspect net-latihan \
--format '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{println}}{{end}}'Output yang Dihasilkan:
app 172.19.0.4/16
db 172.19.0.3/16
web 172.19.0.2/16Aksi range pada blok .Containers melakukan iterasi atas kamus penghuni, lalu tiap baris mencetak nama dan alamat IPv4 diikuti println sebagai pembaris. Blok IPAM.Config adalah array sehingga bisa diakses lewat index:
docker network inspect net-latihan \
--format '{{(index .IPAM.Config 0).Subnet}}'Output yang Dihasilkan:
172.19.0.0/16Filter pada docker network ls #
Perintah ls juga menerima --filter dan --format dengan pola yang sama, berguna untuk memetakan jaringan dalam sekali pandang:
docker network ls --filter driver=bridge \
--format 'table {{.Name}}\t{{.Driver}}\t{{.Scope}}'Output yang Dihasilkan:
NAME DRIVER SCOPE
bridge bridge local
docker-desktop bridge local
host host local
katalog_default bridge local
net-aplikasi bridge local
net-kantor bridge local
net-latihan bridge local
none null localField mana yang menjawab pertanyaan mana #
Sebagian besar masalah jaringan container sebenarnya bisa dijawab oleh satu field yang tepat, tanpa membaca seluruh dokumen:
| Pertanyaan | Field yang dibaca | Contoh temuan |
|---|---|---|
| Service ini ada di jaringan yang sama tidak? | Containers | db tidak tercantum di jaringan app |
| Subnet-nya berapa, bentrok tidak? | IPAM.Config[0].Subnet | 172.19.0.0/16 tumpang tindih VPN kantor |
| Gateway ke host alamatnya apa? | IPAM.Config[0].Gateway | 172.19.0.1 sebagai target host.docker.internal |
| Opsi driver khusus aktif? | Options | kosong pada user-defined; berisi nama bridge di default |
Kombinasi tabel di atas dengan resep bertingkat ping–nslookup–curl dari chapter Komunikasi Antar Container membentuk kebiasaan diagnosis yang rapi: baca dulu dokumen jaringannya, baru uji konektivitasnya. Kebiasaan itulah yang kita rangkai menjadi lima resep penutup Section pada chapter terakhir — karena kelima masalah jaringan yang paling sering melumpuhkan aplikasi multi-container punya pola yang bisa dikenali dalam hitungan menit.
Dengan seluruh peralatan Section ini di tangan — konsep namespace dan driver, custom network, DNS, alias, verifikasi port, dan kini inspeksi dokumen lengkap — kita tinggal menghadapi satu kenyataan terakhir: di dunia nyata, sesuatu pasti salah jalan tepat saat presentasi demo. Chapter Troubleshooting Network menutup Section dengan lima resep diagnosis berurutan untuk lima masalah tersebut, lengkap dengan pesan galatnya yang verbatim.
Referensi #
- docker network inspect — CLI Reference
— format keluaran JSON dan flag
--formatberbasis Go template. - Docker Networking Overview — makna field IPAM, scope, dan driver pada jaringan kontainer.
- Formatting output — Docker CLI Reference
— pola
rangedanindexpada template untuk memformat keluaran CLI.