У меня есть приложение весенней загрузки с mongodb. Он отлично работает с Docker Compose, но хоть убей, я продолжаю получать приведенное ниже исключение, используя Kubernetes. Каждый раз, когда я редактирую приложение, я перезапускаю Compose, чтобы обновить контейнеры и убедиться, что оно по-прежнему работает локально, затем повторно помечаю теги и повторно отправляю их в докер, чтобы обновить любые незначительные изменения в контейнере, чтобы kubernetes ссылался на наиболее обновляемый контейнер:< /p>
...: Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.lambda$open$0(SocketStream.java:84) ~[mongodb-driver-core-4.11.2.jar!/:na]
at java.base/java.util.Optional.orElseThrow(Optional.java:403) ~[na:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:84) ~[mongodb-driver-core-4.11.2.jar!/:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:211) ~[mongodb-driver-core-4.11.2.jar!/:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:193) ~[mongodb-driver-core-4.11.2.jar!/:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:153) ~[mongodb-driver-core-4.11.2.jar!/:na]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:751) ~[na:na]
at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:76) ~[mongodb-driver-core-4.11.2.jar!/:na]
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:104) ~[mongodb-driver-core-4.11.2.jar!/:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:78) ~[mongodb-driver-core-4.11.2.jar!/:na]
... 4 common frames omitted
Я видел это, это и многие другие сообщения, но ничего не помогло. Мне кажется, что я упускаю что-то очевидное.
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
id 'com.adarshr.test-logger' version '4.0.0'
}
group = 'com.app'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '21'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.session:spring-session-core'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'
}
test {
useJUnitPlatform()
}
свойства
spring.application.name=islandzero
spring.data.mongodb.uri=mongodb://mongodb:27017/dev
основной
package com.app.islandzero;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class IslandzeroApplication {
public static void main(String[] args) {
SpringApplication.run(IslandzeroApplication.class, args);
}
}
контроллер
package com.app.islandzero.restservice;
import java.util.concurrent.atomic.AtomicLong;
import java.util.List;
import com.app.islandzero.entity.User;
import com.app.islandzero.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingRestController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@Autowired
private UserRepository userRepository;
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
@GetMapping("/users")
public List getUsers() {
userRepository.deleteAll();
userRepository.save(new User(0L, "Bill", "simmons"));
userRepository.save(new User(1L, "Barry", "sims"));
return userRepository.findAll();
}
}
репозиторий
package com.app.islandzero.repository;
import com.app.islandzero.entity.User;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository {
}
Файл Docker
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu
WORKDIR /opt/app
COPY build/libs/islandzero-0.0.1-SNAPSHOT.jar /opt/app/islandzero-0.0.1-SNAPSHOT.jar
CMD ["java", "-jar", "/opt/app/islandzero-0.0.1-SNAPSHOT.jar"]
создать файл
services:
app:
build:
dockerfile: Dockerfile.dev
context: ./
image: islandone-gradle:latest
container_name: islandone-gradle
ports:
- "8080:8080"
restart: "always"
environment:
- SPRING_DATA_MONGODB_URI=mongodb://mongodb/{dbName}
depends_on:
- mongodb
mongodb:
image: mongo:latest
container_name: "mongodb"
монго ямл
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 256Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
labels:
app: mongoserver
spec:
selector:
matchLabels:
app: mongoserver
template:
metadata:
labels:
app: mongoserver
spec:
containers:
- image: jwinnd/m-0
name: mongoserver
ports:
- containerPort: 27017
---
apiVersion: v1
kind: Service
metadata:
name: mongo-service
labels:
run: mongo-service
spec:
ports:
- port: 27017
targetPort: 27017
protocol: TCP
selector:
app: mongoserver
Yaml приложения
greetingserver.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: greeting
labels:
app: greeting
spec:
selector:
matchLabels:
app: greeting
template:
metadata:
labels:
app: greeting
spec:
containers:
- image: jwinnd/islandone-gradle-kub
name: greeting
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: greeting-service
labels:
run: greeting-service
spec:
ports:
- port: 8080
targetPort: 8080
protocol: TCP
selector:
app: greeting
type: LoadBalancer
Подробнее здесь: https://stackoverflow.com/questions/790 ... ost-refere