#java #mongodb #docker #ubuntu #docker-compose
#java #mongodb #docker #ubuntu #docker-compose
Вопрос:
не могли бы вы мне помочь.Я пытаюсь развернуть приложение на сервере ubuntu.Я использую docker-compose up.У меня эта ошибка.
com.mongodb.MongoSocketOpenException: Exception opening socket
spring-mongo | at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo | at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo | at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo | at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]
spring-mongo | Caused by: java.net.ConnectException: Connection refused (Connection refused)
spring-mongo | at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_212]
spring-mongo | at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_212]
spring-mongo | at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_212]
spring-mongo | at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_212]
spring-mongo | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_212]
spring-mongo | at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_212]
spring-mongo | at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:63) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo | at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo | at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo | ... 3 common frames omitted
Dokerfile
FROM openjdk:8-jdk-alpine
ADD target/spring-mongo.jar spring-mongo.jar
ENTRYPOINT ["java","-jar","spring-mongo.jar"]
application.properties
spring.data.mongodb.host=mymongodb
spring.data.mongodb.port=27017
spring.data.mongodb.database=mongo
spring.data.mongodb.repositories.enabled=true
docer-compose.yml
version: "3"
services:
mymongodb:
image: mongo:latest
container_name: "mymongodb"
ports:
- 27017:27017
spring-mongo:
image: spring-mongo:1.0
container_name: spring-mongo
ports:
- 8080:8080
links:
- mymongodb
Комментарии:
1. В момент, когда вы получаете эту ошибку, MongoDB действительно запущен; если вы подождете, получите ли вы дополнительные сообщения о запуске из базы данных после этого исключения? Или, если вы запустите
docker-compose up -d
, получите исключение, подождите 30-60 секунд и повторите ту же команду, запускается ли она?
Ответ №1:
В вашем docker-compose.yml вы только связываете свое приложение spring boot с вашим mongodb.
В вашем application.properties вы используете mongodb, который не является допустимым хостом.
Вам необходимо передать переменные среды для вашего приложения spring. Для этого вы можете сделать что-то подобное в своем docker-compose.yml.
version: "3"
services:
mymongodb:
image: mongo:latest
container_name: "mymongodb"
ports:
- 27017:27017
spring-mongo:
image: spring-mongo:1.0
container_name: spring-mongo
ports:
- 8080:8080
environment:
- MONGO_HOST=mymongodb
links:
- mymongodb
И в вашем application.properties,
spring.data.mongodb.host=${MONGO_HOST}
Ответ №2:
Попробуйте depends_on вместо ссылок, у меня это сработало.
version: "3"
services:
mymongodb:
image: mongo:latest
container_name: "mymongodb"
network_mode: host
restart: always
ports:
- 27017:27017
spring-mongo:
image: spring-mongo:1.0
container_name: spring-mongo
network_mode: host
restart: always
ports:
- 8080:8080
depends_on:
- mymongodb
Ответ №3:
С приведенной ниже конфигурацией docker-compose.yml и application.properties это работает для меня. docker-compose.yml docker-compose.yml
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo:4.4.5
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
application.properties
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=root
spring.data.mongodb.password=example
spring.data.mongodb.database=springAppDB
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost