Vấn đề
Bạn đang cố gắng truy cập vào DB với IP / tên máy chủ không chính xác. Như bạn thấy, truy cập localhost
trong vùng chứa mùa xuân sẽ phân giải thành vùng chứa đó và không có 27017
cổng nghe ở đó. Khi bạn chạy jar trên máy chủ docker, nó có 27017
cổng có sẵn, đó là lý do tại sao nó hoạt động.
Giải pháp
Bạn có thể sử dụng --hostname
gắn cờ trong docker run
lệnh đặt tên máy chủ của vùng chứa DB để bạn có thể kết nối với nó từ vùng chứa Spring bằng cách sử dụng tên máy chủ.
Tuy nhiên, giải pháp tốt hơn là sử dụng tệp docker-compile và khởi động các vùng chứa bằng cách sử dụng docker-compose up
.
Trước hết hãy sử dụng
MongoClient mongo = new MongoClient("db", 27017));
trong mã Spring của bạn và xây dựng hình ảnh mã của bạn.
Sau đó, hãy làm theo các bước bên dưới để bắt đầu các vùng chứa:
A) Tạo tệp Soạn
Tạo một tệp có tên docker-compose.yml
với nội dung sau:
version: "2.1"
services:
app:
# replace imageName with your image name (block in your case)
image: imageName:tag
ports:
- 9876:4000 # Replace the port of your application here if used
depends_on:
- db
db:
image: mongo
volumes:
- ./database:/data
ports:
- "27017:27017"
B) Chạy tệp soạn thư
Thực thi lệnh sau để chạy tệp soạn:docker-compose up -d