TL; DR Periksa mode jaringan host VirtualBox Anda - seharusnya bridged
jika Anda ingin mesin virtual (dan kontainer Docker yang dihostingnya) dapat diakses di jaringan lokal Anda.
Sepertinya kebingungan Anda terletak pada host mana yang akan disambungkan untuk mengakses aplikasi Anda melalui HTTP. Anda belum benar-benar menjelaskan apa konfigurasi Anda - Saya akan membuat beberapa tebakan, berdasarkan fakta bahwa Anda memiliki "Windows" dan "VirtualBox" di tag Anda.
Saya menduga Anda memiliki Docker yang berjalan pada beberapa rasa Linux yang berjalan di VirtualBox pada host Windows. Saya akan memberi label alamat IP sebagai berikut:
D
= alamat IP wadah Docker
L
= alamat IP dari host Linux yang berjalan di VirtualBox
W
= alamat IP dari host Windows
Saat Anda menjalankan aplikasi Go di host Windows, Anda dapat menyambungkannya http://W:8080/
dari mana saja di jaringan lokal Anda. Ini berfungsi karena aplikasi Go mengikat port 8080 pada mesin Windows dan siapa pun yang mencoba mengakses port 8080 di alamat IP W
akan terhubung.
Dan di sinilah menjadi lebih rumit:
VirtualBox, ketika menyiapkan mesin virtual (VM), dapat mengonfigurasi jaringan dalam salah satu dari beberapa mode berbeda. Saya tidak ingat apa semua opsi yang berbeda, tetapi yang Anda inginkan adalah bridged
. Dalam mode ini, VirtualBox menghubungkan mesin virtual ke jaringan lokal Anda seolah-olah itu adalah mesin yang berdiri sendiri di jaringan, sama seperti mesin lain yang dicolokkan ke jaringan Anda. Dibridged
mode, mesin virtual muncul di jaringan Anda seperti mesin lainnya. Mode lain mengatur semuanya secara berbeda dan mesin tidak akan terlihat di jaringan Anda.
Jadi, dengan asumsi Anda mengatur jaringan dengan benar untuk host Linux ( bridged
), host Linux akan memiliki alamat IP di jaringan lokal Anda (seperti 192.168.0.x) dan Anda akan dapat mengakses container Docker di http://L:8080/
.
Jika host Linux diatur ke beberapa mode selain bridged
, Anda mungkin dapat mengakses dari host Windows, tetapi ini akan tergantung pada mode apa yang digunakan.
EDIT - berdasarkan komentar di bawah, sepertinya situasi yang saya jelaskan di atas benar.
Mari kita mundur sedikit: inilah cara kerja Docker di komputer saya (Ubuntu Linux).
Bayangkan saya menjalankan perintah yang sama yang Anda miliki: docker run -p 8080:8080 dockertest
. Apa yang dilakukannya adalah memulai penampung baru berdasarkan dockertest
gambar dan meneruskan (sambungkan) port 8080 pada host Linux (PC saya) ke port 8080 pada penampung. Docker menyiapkan jaringan internalnya sendiri (dengan kumpulan alamat IP-nya sendiri) untuk memungkinkan daemon Docker berkomunikasi dan mengizinkan kontainer untuk berkomunikasi satu sama lain. Jadi pada dasarnya apa yang Anda lakukan dengan itu -p 8080:8080
adalah menghubungkan jaringan internal Docker dengan jaringan "eksternal" - mis. adaptor jaringan host - pada port tertentu.
Denganku sejauh ini? Oke, sekarang mari mundur selangkah dan lihat sistem Anda. Mesin Anda menjalankan Windows - Docker tidak (saat ini) berjalan di Windows, jadi alat yang Anda gunakan telah menyiapkan host Linux di mesin virtual VirtualBox. Ketika Anda melakukan docker run
di lingkungan Anda, hal yang persis sama terjadi - port 8080 pada host Linux terhubung ke port 8080 pada container. Perbedaan besar di sini adalah bahwa host Windows Anda bukanlah host Linux tempat penampung dijalankan, jadi ada lapisan lain di sini dan itu adalah komunikasi di seluruh lapisan ini di mana Anda mengalami masalah.
Yang Anda butuhkan adalah salah satu dari dua hal:
untuk menghubungkan port 8080 pada VirtualBox VM ke port 8080 pada host Windows, seperti Anda menghubungkan kontainer Docker ke port host.
untuk menghubungkan VM VirtualBox langsung ke jaringan lokal Anda dengan bridged
mode jaringan yang saya jelaskan di atas.
Jika Anda memilih opsi pertama, Anda akan dapat mengakses wadah di http://W:8080
mana W
alamat IP atau nama host dari host Windows. Jika Anda memilih yang kedua, Anda akan dapat mengakses penampung di http://L:8080
mana L
alamat IP atau nama host dari VM Linux.
Jadi itu semua penjelasan tingkat yang lebih tinggi - sekarang Anda perlu mencari cara untuk mengubah konfigurasi VM VirtualBox. Dan di sinilah saya benar-benar tidak dapat membantu Anda - Saya tidak tahu alat apa yang Anda gunakan untuk melakukan semua ini di mesin Windows Anda dan saya sama sekali tidak terbiasa menggunakan Docker di Windows.
Jika Anda dapat membuka jendela konfigurasi VirtualBox, Anda dapat membuat perubahan yang dijelaskan di bawah ini. Ada juga klien baris perintah yang akan memodifikasi VM, tetapi saya tidak terbiasa dengannya.
Untuk bridged
mode (dan ini benar-benar pilihan yang paling sederhana), matikan VM Anda, klik tombol "Pengaturan" di bagian atas, dan ubah mode jaringan ke bridged
, lalu mulai ulang VM dan Anda siap melakukannya. VM harus mengambil alamat IP di jaringan lokal Anda melalui DHCP dan harus terlihat oleh komputer lain di jaringan di alamat IP tersebut.