TL; DR Kiểm tra chế độ mạng của máy chủ VirtualBox của bạn - đó là chế độ bridged
nếu bạn muốn máy ảo (và vùng chứa Docker mà nó đang lưu trữ) có thể truy cập được trên mạng cục bộ của bạn.
Có vẻ như sự nhầm lẫn của bạn nằm ở chỗ nên kết nối với máy chủ nào để truy cập ứng dụng của bạn qua HTTP. Bạn chưa thực sự hiểu rõ cấu hình của mình là gì - tôi sẽ đưa ra một số phỏng đoán, dựa trên thực tế là bạn đã có "Windows" và "VirtualBox" trong thẻ của mình.
Tôi đoán rằng bạn có Docker chạy trên một số phiên bản Linux chạy trong VirtualBox trên máy chủ Windows. Tôi sẽ gắn nhãn các địa chỉ IP như sau:
D
= địa chỉ IP của vùng chứa Docker
L
= địa chỉ IP của máy chủ Linux đang chạy trong VirtualBox
W
= địa chỉ IP của máy chủ Windows
Khi bạn chạy ứng dụng Go trên máy chủ Windows của mình, bạn có thể kết nối với nó http://W:8080/
từ bất kỳ đâu trên mạng cục bộ của mình. Điều này hoạt động vì ứng dụng Go liên kết cổng 8080 trên máy Windows và bất kỳ ai cố gắng truy cập cổng 8080 tại địa chỉ IP W
sẽ được kết nối.
Và đây là nơi mà nó trở nên phức tạp hơn:
VirtualBox, khi nó thiết lập một máy ảo (VM), có thể cấu hình mạng ở một trong một số chế độ khác nhau. Tôi không nhớ tất cả các tùy chọn khác nhau là gì, nhưng tùy chọn bạn muốn là gì bridged
. Trong chế độ này, VirtualBox kết nối máy ảo với mạng cục bộ của bạn như thể nó là một máy độc lập trên mạng, giống như bất kỳ máy nào khác đã được cắm vào mạng của bạn. Ở bridged
chế độ, máy ảo xuất hiện trên mạng của bạn giống như bất kỳ máy nào khác. Các chế độ khác thiết lập mọi thứ theo cách khác và máy sẽ không hiển thị trên mạng của bạn.
Vì vậy, giả sử bạn thiết lập mạng chính xác cho máy chủ Linux ( bridged
), máy chủ Linux sẽ có địa chỉ IP trên mạng cục bộ của bạn (chẳng hạn như 192.168.0.x) và bạn sẽ có thể truy cập vùng chứa Docker của mình tại http://L:8080/
.
Nếu máy chủ Linux được đặt ở một số chế độ khác bridged
, bạn có thể truy cập từ máy chủ Windows, nhưng điều này sẽ phụ thuộc vào chính xác chế độ của nó.
CHỈNH SỬA - dựa trên các nhận xét bên dưới, có vẻ như tình huống tôi mô tả ở trên là đúng.
Hãy sao lưu một chút: đây là cách Docker hoạt động trên máy tính của tôi (Ubuntu Linux).
Hãy tưởng tượng tôi chạy lệnh tương tự bạn có: docker run -p 8080:8080 dockertest
. Điều này làm là bắt đầu một vùng chứa mới dựa trên dockertest
hình ảnh và chuyển tiếp (kết nối) cổng 8080 trên máy chủ Linux (PC của tôi) đến cổng 8080 trên vùng chứa. Docker thiết lập mạng nội bộ của riêng nó (với bộ địa chỉ IP riêng) để cho phép Docker daemon giao tiếp và cho phép các vùng chứa giao tiếp với nhau. Vì vậy, về cơ bản những gì bạn đang làm với đó -p 8080:8080
là kết nối mạng nội bộ của Docker với mạng "bên ngoài" - tức là. bộ điều hợp mạng của máy chủ - trên một cổng cụ thể.
Với tôi cho đến nay? OK, bây giờ hãy lùi lại một bước và xem xét hệ thống của bạn. Máy của bạn đang chạy Windows - Docker (hiện tại) không chạy trên Windows, vì vậy công cụ bạn đang sử dụng đã thiết lập máy chủ Linux trong máy ảo VirtualBox. Khi bạn thực hiện điều này docker run
trong môi trường của mình, điều tương tự cũng đang xảy ra - cổng 8080 trên máy chủ Linux được kết nối với cổng 8080 trên vùng chứa. Sự khác biệt lớn ở đây là máy chủ Windows của bạn không phải là máy chủ Linux mà vùng chứa đang chạy, vì vậy có một lớp khác ở đây và giao tiếp qua lớp này nơi bạn đang gặp sự cố.
Những gì bạn cần là một trong hai thứ:
để kết nối cổng 8080 trên máy ảo VirtualBox với cổng 8080 trên máy chủ Windows, giống như bạn kết nối vùng chứa Docker với cổng máy chủ.
để kết nối trực tiếp máy ảo VirtualBox với mạng cục bộ của bạn bằng bridged
chế độ mạng mà tôi đã mô tả ở trên.
Nếu bạn đi cho tùy chọn đầu tiên, bạn sẽ có thể truy cập vào container tại http://W:8080
nơi W
là địa chỉ IP hoặc hostname của các máy chủ Windows. Nếu bạn lựa chọn thứ hai, bạn sẽ có thể truy cập vào container tại http://L:8080
nơi L
là địa chỉ IP hoặc hostname của máy ảo Linux.
Vì vậy, đó là tất cả lời giải thích cấp cao hơn - bây giờ bạn cần tìm ra cách thay đổi cấu hình của VirtualBox VM. Và đây là nơi tôi thực sự không thể giúp bạn - tôi không biết bạn đang sử dụng công cụ nào để thực hiện tất cả việc này trên máy Windows của mình và tôi cũng không quen với việc sử dụng Docker trên Windows.
Nếu bạn có thể truy cập cửa sổ cấu hình VirtualBox, bạn có thể thực hiện các thay đổi được mô tả bên dưới. Cũng có một ứng dụng khách dòng lệnh sẽ sửa đổi các máy ảo, nhưng tôi không quen với điều đó.
Đối với bridged
chế độ (và đây thực sự là lựa chọn đơn giản nhất), hãy tắt máy ảo của bạn, nhấp vào nút "Cài đặt" ở trên cùng và thay đổi chế độ mạng thành bridged
, sau đó khởi động lại máy ảo và bạn đã sẵn sàng. Máy ảo sẽ nhận một địa chỉ IP trên mạng cục bộ của bạn thông qua DHCP và sẽ được hiển thị cho các máy tính khác trong mạng tại địa chỉ IP đó.