У меня проблема с подключением к mongodb из моего приложения. Вот файл docker-compose:

version: "3"
services:
  olx-crawler:
    container_name: olx-crawler
    image: myimage:v1
    ports:
      - "8099:8099"
    depends_on:
      - olx-mongo
    environment:
      SPRING_DATA_MONGODB_HOST: olx-mongo

  olx-mongo:
    container_name: olx-mongo
    image: mongo
    ports:
      - "27777:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: biafra
      MONGO_INITDB_ROOT_PASSWORD: password

А вот и мой application.yaml:

spring:
  data:
    mongodb:
      host: localhost
      port: 27777
      username: biafra
      password: password
      authentication-database: admin

logging:
  level:
    org.springframework.data.mongodb.core.MongoTemplate: DEBUG
server:
  port: 8099

Теперь я сделал аналогичный проект (docker-compose -> spring app + mongodb), и он работал правильно, но это был порт mongo по умолчанию 27017.

И я знаю, что вам нужно использовать имя контейнера mongo вместо localhost, вот что это:

SPRING_DATA_MONGODB_HOST: olx-mongo 

Потому что он заменяет localhost в application.yml на olx-mongo, как вы можете видеть в журналах приложений:

Exception in monitor thread while connecting to server olx-mongo:27777

Вот несколько журналов:

olx-mongo      | 2020-04-15T18:00:15.170+0000 I  SHARDING [LogicalSessionCacheRefresh] Marking collection config.system.sessions as collection version: <unsharded>
olx-mongo      | 2020-04-15T18:00:15.174+0000 I  SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded>
olx-mongo      | 2020-04-15T18:00:15.175+0000 I  NETWORK  [listener] Listening on /tmp/mongodb-27017.sock
olx-mongo      | 2020-04-15T18:00:15.175+0000 I  NETWORK  [listener] Listening on 0.0.0.0
olx-mongo      | 2020-04-15T18:00:15.175+0000 I  NETWORK  [listener] waiting for connections on port 27017
olx-crawler    | 2020-04-15 18:00:15.436  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
olx-crawler    | 2020-04-15 18:00:15.486  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 45ms. Found 1 MongoDB repository interfaces.
olx-mongo      | 2020-04-15T18:00:16.000+0000 I  SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <unsharded>
olx-crawler    | 2020-04-15 18:00:16.037  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8099 (http)
olx-crawler    | 2020-04-15 18:00:16.050  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
olx-crawler    | 2020-04-15 18:00:16.052  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.33]
olx-crawler    | 2020-04-15 18:00:16.116  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
olx-crawler    | 2020-04-15 18:00:16.117  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1487 ms
olx-crawler    | 2020-04-15 18:00:16.468  INFO 1 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[olx-mongo:27777], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize
=500}
olx-crawler    | 2020-04-15 18:00:16.469  INFO 1 --- [           main] org.mongodb.driver.cluster               : Adding discovered server olx-mongo:27777 to client view of cluster
olx-crawler    | 2020-04-15 18:00:16.550  INFO 1 --- [olx-mongo:27777] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server olx-mongo:27777
olx-crawler    |
olx-crawler    | com.mongodb.MongoSocketOpenException: Exception opening socket
olx-crawler    |        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at java.base/java.lang.Thread.run(Thread.java:844) [na:na]
olx-crawler    | Caused by: java.net.ConnectException: Connection refused (Connection refused)
olx-crawler    |        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
olx-crawler    |        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400) ~[na:na]
olx-crawler    |        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243) ~[na:na]
olx-crawler    |        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225) ~[na:na]
olx-crawler    |        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402) ~[na:na]
olx-crawler    |        at java.base/java.net.Socket.connect(Socket.java:591) ~[na:na]
olx-crawler    |        at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        ... 3 common frames omitted
olx-crawler    |
olx-crawler    | 2020-04-15 18:00:17.096  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
olx-crawler    | 2020-04-15 18:00:17.229  INFO 1 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
olx-crawler    | 2020-04-15 18:00:17.306  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8099 (http) with context path ''
olx-crawler    | 2020-04-15 18:00:17.315  INFO 1 --- [           main] c.e.olxcrawler.OlxCrawlerApplication     : Started OlxCrawlerApplication in 3.944 seconds (JVM running for 4.977)

Любая помощь?

0
Biafra 15 Апр 2020 в 21:08

1 ответ

Лучший ответ

Ну ты написал

И я знаю, что вам нужно использовать имя контейнера mongo вместо localhost, но это все еще не работает.

Но у тебя есть

spring:
  data:
    mongodb:
      host: localhost
      port: 27777

Проблема в том, что с этой конфигурацией вы не можете подключиться к mongo из загрузочного контейнера Spring. Это просто конфигурация для «внешнего мира» контейнера. Например, вы можете подключиться к нему из локально запущенного приложения для загрузки Spring, которое не запускается внутри докера. Чтобы подключиться к mongo из докеризованного приложения Spring Boot, измените host на olx-mongo и порт на 27017.

2
bilak 15 Апр 2020 в 19:15