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.

bash
docker network inspect net-latihan

Output yang Dihasilkan:

text
[
    {
        "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:

  1. Name dan Id: nama jaringan yang kita berikan saat docker network create, dan identitas internal berupa hash 64 heksadesimal — pola yang sama dengan ID container dan digest image yang sering kita temui sepanjang Course. Kolom Id inilah yang diringkas menjadi NETWORK ID pendek pada docker network ls.
  2. 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.
  3. Scope: "local" dan Driver: "bridge": jaringan ini hanya dikenal daemon setempat dan diimplementasikan sebagai bridge Linux. Nilai Scope berubah menjadi "swarm" pada jaringan overlay lintas host — pembahasan yang menunggu di Section Orchestration dan Ekosistem.
  4. IPAM (IP Address Management): blok yang menjawab “dari mana alamat IP berasal”. Driver: "default" berarti alokasi ditangani daemon sendiri, Config memuat subnet 172.19.0.0/16 yang dialokasikan otomatis dari pool berurutan (setelah 172.17 milik docker0 dan 172.18 milik net-aplikasi dari chapter Membuat Custom Network), dan Gateway 172.19.0.1 adalah alamat bridge yang menjadi pintu keluar ke host — alamat yang kita pakai sebagai tujuan ping di chapter Komunikasi Antar Container.
  5. Containers: kamus penghuni jaringan, dengan ID container penuh sebagai kunci. Setiap penghuni membawa Name (nama yang bisa diselesaikan DNS), EndpointID (identitas sambungan veth), MacAddress dalam pola 02:42:ac:13:00:0X yang kita bedah di chapter Bridge Network (awalan 02:42 + subnet dalam heksadesimal), dan IPv4Address. Perhatikan bahwa kamus ini diurutkan berdasarkan ID, bukan nama — app tampil lebih dulu meski web dibuat lebih awal.
  6. Options: kamus opsi driver. Pada jaringan buatan kita kamus ini kosong; bandingkan dengan default bridge yang memuat com.docker.network.bridge.name: docker0 beserta opsi enable-ip-masquerade — itulah yang membuat NAT bekerja otomatis sejak chapter pertama Section ini.
  7. 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:

bash
docker network inspect net-latihan \
  --format '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{println}}{{end}}'

Output yang Dihasilkan:

text
app 172.19.0.4/16
db 172.19.0.3/16
web 172.19.0.2/16

Aksi 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:

bash
docker network inspect net-latihan \
  --format '{{(index .IPAM.Config 0).Subnet}}'

Output yang Dihasilkan:

text
172.19.0.0/16

Filter pada docker network ls #

Perintah ls juga menerima --filter dan --format dengan pola yang sama, berguna untuk memetakan jaringan dalam sekali pandang:

bash
docker network ls --filter driver=bridge \
  --format 'table {{.Name}}\t{{.Driver}}\t{{.Scope}}'

Output yang Dihasilkan:

text
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     local

Field mana yang menjawab pertanyaan mana #

Sebagian besar masalah jaringan container sebenarnya bisa dijawab oleh satu field yang tepat, tanpa membaca seluruh dokumen:

PertanyaanField yang dibacaContoh temuan
Service ini ada di jaringan yang sama tidak?Containersdb tidak tercantum di jaringan app
Subnet-nya berapa, bentrok tidak?IPAM.Config[0].Subnet172.19.0.0/16 tumpang tindih VPN kantor
Gateway ke host alamatnya apa?IPAM.Config[0].Gateway172.19.0.1 sebagai target host.docker.internal
Opsi driver khusus aktif?Optionskosong 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 #