Tôi không thể nói chắc chắn nếu không nhìn thấy cấu hình thử nghiệm của bạn, nhưng tôi đoán rằng nó hoạt động với docker run
chứ không phải Testcontainers vì docker run
hiển thị một cổng cố định (luôn là 27017) nhưng Testcontainers sẽ để lộ cổng 27017
như một cổng ngẫu nhiên (để tránh xung đột cổng trên máy thử nghiệm).
Để sử dụng Testcontainers với một bài kiểm tra Quarkus, các bài kiểm tra của bạn phải tuân theo quy trình sau:
- Bắt đầu các vùng chứa. Điều này là cần thiết vì chỉ có thể biết cổng ngẫu nhiên cho MongoDB sau vùng chứa đã được khởi động.
-
Nhận các cổng ngẫu nhiên từ Testcontainers sau khi các container được khởi động, sau đó đặt bất kỳ thuộc tính cấu hình kiểm tra nào phụ thuộc vào các cổng container. Ví dụ:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017); static { mongodb.start(); System.setProperty("quarkus.mongodb.connection-string", "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort()); }
- Hãy để Quarkus bắt đầu. Vì Quarkus không hỗ trợ cấu hình động nên bạn phải đặt cổng MongoDB trước khi Quarkus khởi động.