Cara Port Mapping Docker dengan CLI dan Compose

Oleh Fitri Aulia
Blog Panduan Port Mapping Docker

Port mapping Docker dilakukan dengan format -p HOST_PORT:CONTAINER_PORT ketika kamu membuat container. Sebagai contoh, perintah docker run -d --name web -p 8080:80 nginx:alpine meneruskan permintaan dari port 8080 pada host ke port 80 di dalam container.

Setelah perintah tersebut berjalan, aplikasi dapat dibuka melalui http://localhost:8080 dari host. Panduan ini membahas prosesnya dari persiapan, penerapan melalui CLI dan Docker Compose, pembatasan akses, hingga troubleshooting.

Memahami Urutan Host Port dan Container Port

Docker mengisolasi jaringan container dari host. Karena itu, aplikasi yang berjalan pada port tertentu di dalam container belum otomatis dapat diakses dari browser atau perangkat lain.

Bagian kiri merupakan port pada host, sedangkan bagian kanan merupakan port yang didengarkan aplikasi di dalam container. Jika aplikasi menggunakan port 3000 di dalam container dan kamu ingin membukanya melalui port 8080 pada host, gunakan -p 8080:3000.

Port mapping juga sering disebut port publishing. Jika kamu masih mempelajari konsep image, container, dan jaringan, baca panduan Docker untuk pemula sebelum melanjutkan.

Persiapan Sebelum Melakukan Port Mapping

Pastikan Docker Engine atau Docker Desktop sudah aktif dan akunmu dapat menjalankan perintah Docker. Pengguna server Ubuntu dapat mengikuti panduan cara install Docker di Ubuntu jika Docker belum tersedia.

Kamu juga perlu mengetahui port yang digunakan aplikasi di dalam container. Informasi tersebut biasanya tersedia pada dokumentasi image, konfigurasi aplikasi, atau instruksi EXPOSE di Dockerfile.

Sebelum memilih host port, pastikan port tersebut belum digunakan proses lain. Port host yang sama tidak dapat dipakai oleh dua container secara bersamaan pada alamat IP dan protokol yang sama.

Cara Port Mapping Docker dengan docker run

1. Jalankan Container dengan Port yang Dipublikasikan

Contoh berikut menjalankan Nginx di latar belakang dengan nama container web. Docker meneruskan trafik dari port 8080 pada host menuju port 80 di dalam container.

Urutan port tidak boleh tertukar karena kedua angka memiliki fungsi berbeda. Port 8080 dapat diganti dengan host port lain yang tersedia, sedangkan port 80 harus sesuai dengan port layanan di dalam image Nginx.

2. Periksa Port yang Sudah Dipublikasikan

Gunakan docker ps untuk melihat container yang sedang berjalan dan kolom PORTS. Kamu juga dapat meminta Docker menampilkan pemetaan milik satu container melalui perintah docker port.

Output seperti 0.0.0.0:8080->80/tcp menunjukkan bahwa port 8080 tersedia pada seluruh antarmuka host dan diteruskan ke port 80 TCP di dalam container. Pada server ber-IP publik, kondisi tersebut dapat membuat layanan dijangkau dari jaringan luar apabila aturan jaringan lain mengizinkannya.

3. Uji Akses dari Host

Buka http://localhost:8080 melalui browser atau uji responsnya dengan curl. Respons HTTP membuktikan bahwa container berjalan, aplikasi mendengarkan port yang benar, dan pemetaan dapat digunakan dari host.

Baca Juga:  Rebuild OS VPS MyDomaiNesia: Panduan Install Ulang & Reset Root

Jika pengujian dilakukan pada VPS dari komputer lain, ganti localhost dengan alamat IP atau domain server. Pastikan kamu hanya membuka port yang memang dibutuhkan oleh aplikasi.

Jika kamu membutuhkan server yang dapat dikonfigurasi untuk menjalankan container, kamu dapat melihat pilihan Cloud VPS DomaiNesia. Sesuaikan spesifikasi server dengan jumlah container, beban aplikasi, serta kebutuhan penyimpananmu.

Variasi Port Mapping yang Perlu Diketahui

1. Memetakan Lebih dari Satu Port

Tambahkan opsi -p untuk setiap port yang benar-benar perlu dipublikasikan. Contoh berikut meneruskan dua host port ke dua port berbeda pada container yang sama.

Jangan memublikasikan port database hanya karena aplikasi menggunakannya. Container yang berada pada user-defined network dapat berkomunikasi menggunakan nama service atau nama container tanpa membuka port database ke host.

2. Membatasi Port agar Hanya Dapat Diakses dari Host

Docker mengikat port yang dipublikasikan ke seluruh antarmuka host secara default. Tambahkan 127.0.0.1 jika layanan hanya boleh diakses dari mesin yang sama, misalnya ketika aplikasi berada di belakang reverse proxy.

Format lengkapnya adalah HOST_IP:HOST_PORT:CONTAINER_PORT. Pembatasan ini mengurangi risiko layanan internal terbuka langsung ke internet, tetapi kamu tetap perlu mengatur autentikasi dan keamanan aplikasi.

3. Memublikasikan Port UDP

Docker menggunakan TCP ketika protokol tidak ditulis. Tambahkan akhiran /udp jika aplikasi menerima trafik UDP.

Satu nomor port dapat dipublikasikan untuk TCP dan UDP secara terpisah ketika aplikasi memerlukan keduanya. Tuliskan dua opsi -p agar konfigurasi protokolnya jelas.

4. Membiarkan Docker Memilih Host Port

Kamu dapat menulis port container tanpa menentukan host port, misalnya -p 80. Docker akan memilih host port yang tersedia secara otomatis, lalu kamu dapat memeriksanya melalui docker port nama-container.

Pola ini berguna untuk pengujian sementara atau ketika sistem lain akan menemukan port secara dinamis. Untuk layanan yang diakses pengguna melalui alamat tetap, host port eksplisit biasanya lebih mudah dikelola.

Cara Port Mapping dengan Docker Compose

Docker Compose menyimpan konfigurasi container dalam berkas sehingga tim dapat menjalankan lingkungan yang konsisten. Konfigurasi jaringan antarlayanan dan port publik memiliki fungsi berbeda, sebagaimana dijelaskan dalam pembahasan network di Docker.

1. Buat Berkas compose.yaml

Contoh berikut memublikasikan Nginx melalui port 8080 pada host. Tanda kutip pada nilai port membantu mencegah YAML membaca format tersebut sebagai tipe data lain.

2. Jalankan dan Periksa Service

Jalankan service dari direktori yang menyimpan compose.yaml. Setelah itu, periksa status dan port yang diterapkan oleh Docker Compose.

Kamu dapat membuka http://localhost:8080 untuk menguji layanan. Jika konfigurasi port diubah, jalankan kembali docker compose up -d agar Compose membuat ulang container dengan konfigurasi baru.

3. Batasi Akses Service jika Tidak Perlu Dibuka ke Internet

Tambahkan alamat host ke nilai ports untuk membatasi akses. Contoh "127.0.0.1:8080:80" membuat layanan hanya menerima koneksi dari host.

Service database yang hanya digunakan service lain biasanya tidak memerlukan bagian ports. Letakkan service pada network Compose yang sama, lalu gunakan nama service sebagai hostname internal.

Keamanan Port Mapping untuk Server Produksi

Port yang dipublikasikan tanpa host IP tertentu akan terikat ke 0.0.0.0 dan :: secara default. Artinya, layanan dapat menerima koneksi melalui seluruh antarmuka host sehingga kamu perlu memperlakukannya sebagai permukaan serangan.

Publikasikan hanya port aplikasi yang dibutuhkan pengguna. Batasi layanan internal ke 127.0.0.1 atau jaringan container, lalu periksa aturan firewall pada host dan lapisan jaringan penyedia server.

Baca Juga:  Menggunakan PortSentry untuk Mendeteksi Serangan Port Scan

Untuk aplikasi web produksi, letakkan container di belakang reverse proxy agar pengelolaan domain, HTTPS, header, dan routing lebih terpusat. Kamu dapat menggunakan panduan setup Nginx reverse proxy sebagai langkah lanjutan.

Troubleshooting Port Mapping Docker

Jika aplikasi belum dapat diakses, periksa setiap lapisan secara berurutan. Pendekatan ini membantu membedakan masalah container, aplikasi, pemetaan port, dan jaringan host tanpa mengubah banyak konfigurasi sekaligus.

1. Pastikan Container Berjalan

Perintah docker ps -a menampilkan container yang berjalan maupun berhenti. Jika statusnya Exited, baca log agar kamu mengetahui penyebab proses aplikasi berhenti.

2. Cocokkan Host Port dan Container Port

Jalankan docker port web dan pastikan container port sesuai dengan port yang didengarkan aplikasi. Pemetaan 8080:3000 tidak akan membantu jika aplikasi sebenarnya mendengarkan port 8000.

3. Pastikan Aplikasi Mendengarkan pada 0.0.0.0

Aplikasi yang hanya terikat ke 127.0.0.1 di dalam container tidak dapat menerima trafik yang diteruskan ke antarmuka container. Atur aplikasi agar mendengarkan 0.0.0.0 pada container port yang benar, lalu buat ulang atau restart container sesuai mekanisme deployment.

Kamu dapat memeriksa socket yang aktif dari dalam container jika image menyediakan utilitas yang diperlukan. Perintahnya dapat berupa ss -lntp, netstat -lntp, atau pemeriksaan konfigurasi aplikasi.

4. Periksa Konflik pada Host Port

Docker biasanya menolak menjalankan container jika host port sudah digunakan. Pesan error sering memuat keterangan seperti address already in use atau kegagalan mengikat port.

Hentikan proses yang tidak diperlukan atau pilih host port lain. Jangan mengubah container port kecuali aplikasi di dalam container juga dikonfigurasi untuk menggunakan port baru.

5. Uji dari Host Sebelum Menguji dari Internet

Jalankan curl http://127.0.0.1:8080 pada host terlebih dahulu. Jika pengujian lokal berhasil tetapi akses dari perangkat lain gagal, fokuskan pemeriksaan pada alamat bind, firewall, security group, router, atau jaringan penyedia.

Jika pengujian lokal juga gagal, periksa status container, log aplikasi, dan kesesuaian container port. Panduan error Docker yang sering terjadi dapat membantu saat pesan error mengarah ke masalah Docker yang lebih umum.

6. Buat Ulang Container Setelah Mengubah Mapping

Port publishing ditetapkan ketika container dibuat. Karena itu, hentikan dan buat ulang container jika kamu perlu mengganti pemetaan pada deployment berbasis docker run.

Pada Docker Compose, ubah nilai ports di compose.yaml, lalu jalankan kembali docker compose up -d. Compose akan menerapkan perubahan dengan membuat ulang service yang terdampak.

FAQ tentang Port Mapping Docker

Apa Perbedaan EXPOSE dan Port Mapping?

EXPOSE mendokumentasikan port yang digunakan image, tetapi tidak memublikasikannya ke antarmuka host. Opsi -p pada docker run atau bagian ports pada Compose membuat aturan penerusan dari host ke container.

Apakah Container dalam Satu Network Memerlukan Port Mapping?

Container pada user-defined network dapat berkomunikasi melalui nama container atau nama service dan container port. Port mapping hanya diperlukan ketika layanan harus diakses dari host atau jaringan di luar network Docker tersebut.

Apakah Satu Container Port Dapat Dipetakan ke Host Port yang Berbeda?

Container port dapat dipetakan ke host port yang berbeda selama host port tersebut tersedia. Sebagai contoh, -p 8080:80 dan -p 8081:80 dapat digunakan pada dua container berbeda agar keduanya menjalankan layanan internal pada port 80.

Mengapa Port Sudah Dipetakan tetapi Aplikasi Tetap Tidak Bisa Diakses?

Penyebab yang umum mencakup container berhenti, container port salah, aplikasi hanya mendengarkan 127.0.0.1 di dalam container, konflik host port, atau pembatasan firewall. Periksa masalah dari container menuju jaringan luar secara berurutan agar penyebabnya lebih cepat ditemukan.

Kesimpulan

Cara port mapping Docker yang paling dasar menggunakan -p HOST_PORT:CONTAINER_PORT, sedangkan Docker Compose menempatkan nilai yang sama pada bagian ports. Setelah menerapkan mapping, selalu periksa hasilnya dengan docker port atau docker compose ps, lalu uji akses dari host.

Pada server produksi, hindari membuka semua layanan ke seluruh antarmuka. Batasi port internal, gunakan network Docker untuk komunikasi antarkontainer, dan tempatkan aplikasi web di belakang reverse proxy ketika membutuhkan domain serta HTTPS.

Fitri Aulia

Hi! I'm a tech enthusiast who loves digging into how things work, especially in web development, VPS setups, and anything open-source.

Berlangganan Artikel

Dapatkan artikel, free ebook dan video
terbaru dari DomaiNesia

{{ errors.name }} {{ errors.email }}
Migrasi ke DomaiNesia

Migrasi Hosting ke DomaiNesia Gratis 1 Bulan

Ingin memiliki hosting dengan performa terbaik? Migrasikan hosting Anda ke DomaiNesia. Gratis jasa migrasi dan gratis 1 bulan masa aktif!

Ya, Migrasikan Hosting Saya