Vấn đề liên quan đến điểm xuất phát. Nếu bạn truy cập localhost từ bên trong vùng chứa Docker, thì localhost sẽ trỏ đến chính bộ dock, không phải máy chủ lưu trữ và do đó lệnh gọi sẽ không đến được máy chủ hoặc các bộ dock khác.
Nếu tất cả các docker của bạn nằm trên cùng một máy chủ, thì cách dễ nhất để khiến chúng nói chuyện với nhau qua localhost là chia sẻ mạng giữa các vùng chứa khi đang chạy. Trước tiên, hãy chạy chương trình phụ trợ một cách bình thường, sau đó khởi động các vùng chứa khác bằng --net chuyển đổi:
docker run [other params] -d -p 8080:8080 --name service-app-container service_app_image
docker run [other params] -p 3000:3000 --net="container:service-app-container" --name client-app-container client_app_image
Giờ đây, tất cả các cổng được hiển thị và ánh xạ bởi bất kỳ vùng chứa nào chia sẻ mạng sẽ có thể truy cập được trong localhost từ bất kỳ docker nào.
- Để truy cập vùng chứa dịch vụ-ứng dụng từ mọi nơi, hãy sử dụng máy:8080.
- Để truy cập cục bộ từ máy chủ lưu trữ, hãy sử dụng localhost:8080.
- Để truy cập nội bộ từ ứng dụng dịch vụ, hãy sử dụng locahost:8080.
- Để truy cập ứng dụng dịch vụ từ ứng dụng khách, hãy sử dụng localhost:8080
Ứng dụng khách sẽ chỉ được hiển thị trên cổng 3000 với thế giới nếu bạn cũng hiển thị nó trong docker có vùng chứa. Cổng tiếp xúc không được giống như điều này gây nhầm lẫn cho mạng:
docker run [other params] -d -p 8080:8080 3001:3000 --name service-app-container service_app_image
docker run [other params] -p 3000:3000 --net="container:service-app-container" client_app_image
Bây giờ bạn có thể truy cập ứng dụng khách từ bên ngoài bằng machine:3001.