CHỈNH SỬA:
Tôi chưa bao giờ thực hiện phát triển spring-boot, nhưng lỗi bạn đang nói đang được hiển thị rất có thể không liên quan đến vấn đề mongo. Tuy nhiên, đây là lời giải thích tại sao kết nối mongo của bạn không thành công:
docker-compose
tạo một mạng ảo nếu một mạng chưa được chỉ định trong tệp (như trong trường hợp của bạn).
Tất cả các ứng dụng của bạn chạy bên trong mạng này, hoàn toàn cách biệt với nhau. Như vậy, localhost
trong vùng chứa khởi động mùa xuân của bạn thực sự đề cập đến chính nó. Có nghĩa là ứng dụng khởi động mùa xuân của bạn đang mong đợi mongo
ví dụ đang chạy bên trong vùng chứa của nó (mà không phải, nó nằm trong một vùng chứa khác).
Điều này sẽ ổn khi cả cơ sở dữ liệu và ứng dụng đang chạy trên mạng của máy tính xách tay của bạn. Nhưng như đã đề cập, chúng hiện đang chạy trong docker-compose
mạng, hoàn toàn cách ly.
Tuy nhiên, docker-compose
là thực sự thông minh! Nó tạo một DNS cho mỗi vùng chứa của bạn sử dụng tên-dịch vụ (trong trường hợp của bạn là mongo
và spring
) được chỉ định trong docker-compose
của bạn để cho phép dễ dàng truy cập vào các vùng chứa bên trong mạng.
Vì vậy, bạn có thể thay đổi spring.data.mongodb.uri=mongodb://localhost:27017/db
tới spring.data.mongodb.uri=mongodb://mongo:27017/db
và điều đó sẽ cho phép nó kết nối.