Cara Memakai Docker Network agar Container Saling Bicara
Panduan membuat user-defined network di Docker agar container saling memanggil lewat nama, memisahkan jaringan internal, dan memakainya di Compose.
Jawaban singkat
Buat jaringan sendiri dengan docker network create, lalu jalankan container di jaringan itu. Container di user-defined network bisa saling memanggil lewat nama berkat DNS bawaan Docker, sesuatu yang tidak tersedia di jaringan bridge default.
Daftar isi
- Kenapa jaringan bridge default tidak cukup?
- Langkah membuat jaringan dan menyambungkan container
- 1. Lihat jaringan yang sudah ada
- 2. Buat jaringan baru
- 3. Jalankan container di jaringan itu
- 4. Uji pencarian nama
- 5. Sambungkan container yang sudah berjalan
- 6. Periksa isi jaringan
- Memisahkan jaringan publik dan internal
- Jaringan di Docker Compose
- Ringkasan driver jaringan Docker
- Pertanyaan yang sering diajukan
Pernah menjalankan container aplikasi dan container database terpisah, lalu aplikasinya gagal tersambung ke db:5432 dengan pesan nama host tidak ditemukan? Penyebabnya hampir selalu jaringan. Keduanya mungkin berada di jaringan bridge bawaan Docker, yang tidak menyediakan pencarian nama antar container.
Solusinya adalah membuat user-defined network. Container yang tergabung di jaringan buatanmu bisa saling memanggil lewat nama container atau alias, dan terisolasi dari container lain yang tidak ikut jaringan itu. Berikut langkahnya dari nol sampai rapi di Compose.
Kenapa jaringan bridge default tidak cukup?
Saat Docker terpasang, ia membuat jaringan bernama bridge. Container yang dijalankan tanpa opsi --network otomatis masuk ke sana. Container di jaringan ini memang bisa saling terhubung, tetapi hanya lewat alamat IP, dan IP itu bisa berubah setiap container dibuat ulang. Fitur lama --link untuk mengatasi hal ini sudah lama berstatus legacy.
User-defined bridge network memperbaiki semua itu. Dokumentasi Docker menyebut beberapa kelebihannya: pencarian nama otomatis antar container, isolasi yang lebih baik karena hanya container yang kamu masukkan yang bisa saling bicara, serta container bisa disambung dan dilepas dari jaringan tanpa harus dihentikan.
Langkah membuat jaringan dan menyambungkan container
1. Lihat jaringan yang sudah ada
docker network ls
Kamu akan melihat setidaknya bridge, host, dan none. Jaringan buatan Compose juga muncul di sini dengan nama <nama-proyek>_default.
2. Buat jaringan baru
docker network create appnet
Tanpa opsi tambahan, driver yang dipakai adalah bridge. Kalau perlu subnet tertentu agar tidak bentrok dengan jaringan kantor atau VPN, tambahkan --subnet 172.30.0.0/24.
3. Jalankan container di jaringan itu
docker run -d --name db --network appnet \
-e POSTGRES_PASSWORD=rahasia postgres:17
docker run -d --name app --network appnet \
-e DATABASE_HOST=db -p 8080:8080 contoh/app:latest
Perhatikan bahwa database tidak diberi -p. Ia tidak perlu dibuka ke internet, cukup dijangkau oleh app lewat jaringan internal. Hanya app yang mempublikasikan port ke host.
4. Uji pencarian nama
docker exec -it app getent hosts db
Bila keluar alamat IP diikuti nama db, DNS bawaan Docker bekerja. Di dalam container, resolver menunjuk ke 127.0.0.11, server DNS internal milik Docker yang menjawab nama container di jaringan yang sama. Kalau image tidak punya getent, coba ping db atau nslookup db bila tersedia.
5. Sambungkan container yang sudah berjalan
docker network connect appnet nama-container-lain
docker network disconnect appnet nama-container-lain
Satu container boleh tergabung di beberapa jaringan sekaligus. Ini berguna untuk reverse proxy yang harus menjangkau beberapa aplikasi yang saling terpisah.
6. Periksa isi jaringan
docker network inspect appnet
Bagian Containers menampilkan container yang tergabung beserta IP-nya. Perintah ini yang pertama kali dibuka saat ada koneksi yang tidak nyambung.
Memisahkan jaringan publik dan internal
Pola yang aman untuk server produksi adalah dua jaringan. Jaringan frontend berisi reverse proxy dan aplikasi. Jaringan backend berisi aplikasi dan database. Reverse proxy tidak bisa menyentuh database secara langsung, karena tidak satu jaringan.
Untuk jaringan yang sama sekali tidak boleh keluar ke internet, ada opsi --internal:
docker network create --internal backend
Container yang hanya tergabung di jaringan internal tidak punya rute keluar. Cocok untuk database yang tidak perlu mengunduh apa pun. Ingat juga bahwa port yang dipublikasikan dengan -p bisa melewati aturan firewall host di beberapa konfigurasi, jadi baca juga cara mengamankan Docker agar port tidak bocor.
Jaringan di Docker Compose
Compose otomatis membuat satu jaringan default per proyek, dan setiap service bisa memanggil service lain lewat nama service-nya. Untuk pemisahan seperti di atas, deklarasikan jaringan sendiri:
services:
proxy:
image: nginx:stable
ports:
- "80:80"
networks: [frontend]
app:
image: contoh/app:latest
networks: [frontend, backend]
db:
image: postgres:17
environment:
POSTGRES_PASSWORD: rahasia
networks: [backend]
networks:
frontend:
backend:
internal: true
Di sini proxy bisa memanggil app, app bisa memanggil db, tapi proxy tidak bisa menjangkau db. Kalau dua proyek Compose berbeda perlu berbagi jaringan, buat jaringan lebih dulu dengan docker network create, lalu di Compose tandai dengan external: true.
Ringkasan driver jaringan Docker
| Driver | Kapan dipakai | Pencarian nama antar container |
|---|---|---|
bridge default | Uji cepat satu container | Tidak |
bridge buatan sendiri | Hampir semua kebutuhan di satu host | Ya |
host | Container memakai jaringan host langsung, tanpa isolasi | Tidak relevan |
none | Container tanpa jaringan sama sekali | Tidak |
overlay | Beberapa host dalam Docker Swarm | Ya |
macvlan | Container butuh alamat MAC sendiri di LAN | Tergantung konfigurasi |
Untuk satu VPS, user-defined bridge sudah cukup di hampir semua kasus. Overlay baru relevan saat kamu menjalankan beberapa server sekaligus, topik yang dibahas di Docker Swarm atau Kubernetes untuk tim kecil.
Pertanyaan yang sering diajukan
Apakah nama container bisa dipakai lintas jaringan yang berbeda?
Tidak. DNS bawaan Docker hanya menjawab nama container yang berada di jaringan yang sama. Kalau dua container perlu bicara, keduanya harus tergabung di minimal satu jaringan yang sama.
Apakah localhost di dalam container menunjuk ke host?
Tidak. localhost di dalam container adalah container itu sendiri. Untuk menjangkau layanan di host, pakai IP gateway jaringan atau host.docker.internal yang di Linux perlu ditambahkan dengan opsi --add-host=host.docker.internal:host-gateway.
Bagaimana menghapus jaringan yang tidak terpakai?
Pakai docker network rm nama-jaringan untuk satu jaringan, atau docker network prune untuk menghapus semua jaringan yang tidak dipakai container mana pun.
Kenapa subnet jaringan Docker bentrok dengan jaringan kantor atau VPN?
Docker memilih subnet dari rentang privat secara otomatis. Bila bentrok, buat jaringan dengan --subnet yang jelas berbeda, atau atur default-address-pools di /etc/docker/daemon.json lalu restart Docker.
Checklist singkat sebelum selesai:
- Container yang perlu saling bicara berada di user-defined network yang sama.
- Database dan layanan internal tidak memakai
-p. - Jaringan backend ditandai
internalbila tidak butuh internet. docker network inspectmenampilkan anggota yang sesuai rencana.


