【发布时间】:2020-06-14 17:27:10
【问题描述】:
我有三个微服务和三个数据库,例如 player-db、game-db 和 score-db。 对于这些服务中的每一个,我在它们的文件夹中定义了 Dockerfile。 (DockerFiles 相同,只是 JAR 文件的名称和 container_name 不同) 用于评分服务的 DockerFile:
FROM openjdk:8
COPY ./target/demo-0.0.1-SNAPSHOT.jar score.jar
EXPOSE 8080
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://score-container-db:27017/","-jar","-Djava.rmi.server.hostname=127.0.0.1", "score.jar"]
我必须指出,我所有的服务包都是子包:
package spring.multiple.mongo.project;
这是我的应用程序,顺便说一下,在我使用的应用程序中 @SpringBootApplication(排除 = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) 用于自动配置。 我的申请:
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
//@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是我的 docker-compose.yml:
version: "3"
services:
player-docker:
build:
context: ./
dockerfile: ./src/main/java/spring/multiple/mongo/project/player/DockerFile
restart: always
ports:
- 8081:8080
depends_on:
- db
game-docker:
build:
context: ./
dockerfile: ./src/main/java/spring/multiple/mongo/project/game/DockerFile
restart: always
ports:
- 8082:8080
depends_on:
- db1
score-docker:
build:
context: ./
dockerfile: ./src/main/java/spring/multiple/mongo/project/score/Dockerfile
restart: always
ports:
- 8083:8080
depends_on:
- db2
db:
image: mongo
container_name: player-container-db
volumes:
- mongodata:/data/db
ports:
- 27017:27017
restart: always
environment:
MONGO_INITDB_ROOT_DATABASE: player-mongo-db
db1:
image: mongo
container_name: game-container-db
volumes:
- mongodata:/data/db1
ports:
- 27018:27017
restart: always
environment:
MONGO_INITDB_ROOT_DATABASE: game-mongo-db
db2:
image: mongo
container_name: score-container-db
volumes:
- mongodata:/data/db2
ports:
- 27019:27017
restart: always
environment:
MONGO_INITDB_ROOT_DATABASE: score-mongo-db
volumes:
mongodata:
我的 application.properties:
spring.data.mongodb.host=localhost
spring.data.mongodb.database=player-db
spring.data.mongodb.port=27017
spring.data1.mongodb.host=localhost
spring.data1.mongodb.database=game-db
spring.data1.mongodb.port=27017
spring.data2.mongodb.host=localhost
spring.data2.mongodb.database=score-db
spring.data2.mongodb.port=27017
问题是,当我运行 docker-compose up 时,当启动 SpringBoot 部分时,对于我的所有服务,它都会显示一个错误:
score-docker_1 | 2020-06-14 17:08:17.698 INFO 1 --- [localhost:27017] org.mon
godb.driver.cluster : Exception in monitor thread while connecting
to server localhost:27017
score-docker_1 |
score-docker_1 | com.mongodb.MongoSocketOpenException: Exception opening socke
t
score-docker_1 | at com.mongodb.internal.connection.SocketStream.open(Soc
ketStream.java:70) ~[mongo-java-driver-3.11.2.jar!/:na]
score-docker_1 | at com.mongodb.internal.connection.InternalStreamConnect
ion.open(InternalStreamConnection.java:128) ~[mongo-java-driver-3.11.2.jar!/:na]
score-docker_1 | at com.mongodb.internal.connection.DefaultServerMonitor$
ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongo-java-driver-3.1
1.2.jar!/:na]
score-docker_1 | at java.lang.Thread.run(Thread.java:748) [na:1.8.0_252]
score-docker_1 | Caused by: java.net.ConnectException: Connection refused (Con
nection refused)
score-docker_1 | at java.net.PlainSocketImpl.socketConnect(Native Method)
~[na:1.8.0_252]
score-docker_1 | at java.net.AbstractPlainSocketImpl.doConnect(AbstractPl
ainSocketImpl.java:350) ~[na:1.8.0_252]
score-docker_1 | at java.net.AbstractPlainSocketImpl.connectToAddress(Abs
tractPlainSocketImpl.java:206) ~[na:1.8.0_252]
score-docker_1 | at java.net.AbstractPlainSocketImpl.connect(AbstractPlai
nSocketImpl.java:188) ~[na:1.8.0_252]
score-docker_1 | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java
:392) ~[na:1.8.0_252]
score-docker_1 | at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_2
52]
score-docker_1 | at com.mongodb.internal.connection.SocketStreamHelper.in
itialize(SocketStreamHelper.java:64) ~[mongo-java-driver-3.11.2.jar!/:na]
score-docker_1 | at com.mongodb.internal.connection.SocketStream.initiali
zeSocket(SocketStream.java:79) ~[mongo-java-driver-3.11.2.jar!/:na]
score-docker_1 | at com.mongodb.internal.connection.SocketStream.open(Soc
ketStream.java:65) ~[mongo-java-driver-3.11.2.jar!/:na]
score-docker_1 | ... 3 common frames omitted
score-docker_1 |
game-docker_1 | 2020-06-14 17:08:19.260 INFO 1 --- [ main] o.s.s.c
oncurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTas
kExecutor'
game-docker_1 | 2020-06-14 17:08:20.490 INFO 1 --- [ main] o.s.b.w
.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with
context path ''
score-docker_1 | 2020-06-14 17:08:19.751 INFO 1 --- [ main] o.s.s.c
oncurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTas
kExecutor'
score-docker_1 | 2020-06-14 17:08:20.776 INFO 1 --- [ main] o.s.b.w
.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with
context path ''
game-container-db | 2020-06-14T17:07:55.286+0000 I COMMAND [LogicalSessionCach
eRefresh] command config.system.sessions command: createIndexes { createIndexes:
"system.sessions", indexes: [ { key: { lastUse: 1 }, name: "lsidTTLIndex", expi
reAfterSeconds: 1800 } ], $db: "config" } numYields:0 reslen:114 locks:{ Paralle
lBatchWriterMode: { acquireCount: { r: 2 } }, ReplicationStateTransition: { acqu
ireCount: { w: 3 } }, Global: { acquireCount: { r: 1, w: 2 } }, Database: { acqu
ireCount: { r: 1, w: 2, W: 1 } }, Collection: { acquireCount: { r: 4, w: 1, R: 1
, W: 2 } }, Mutex: { acquireCount: { r: 3 } } } flowControl:{ acquireCount: 1, t
imeAcquiringMicros: 1 } storage:{} protocol:op_msg 1880ms
score-container-db | 2020-06-14T17:07:55.232+0000 I COMMAND [LogicalSessionCac
heRefresh] command config.system.sessions command: createIndexes { createIndexes
: "system.sessions", indexes: [ { key: { lastUse: 1 }, name: "lsidTTLIndex", exp
ireAfterSeconds: 1800 } ], $db: "config" } numYields:0 reslen:114 locks:{ Parall
elBatchWriterMode: { acquireCount: { r: 2 } }, ReplicationStateTransition: { acq
uireCount: { w: 3 } }, Global: { acquireCount: { r: 1, w: 2 } }, Database: { acq
uireCount: { r: 1, w: 2, W: 1 } }, Collection: { acquireCount: { r: 4, w: 1, R:
1, W: 2 } }, Mutex: { acquireCount: { r: 3 } } } flowControl:{ acquireCount: 1,
timeAcquiringMicros: 1 } storage:{} protocol:op_msg 1826ms
在邮递员中:
Error: connect ECONNREFUSED 192.168.99.100:8080
我尝试了太多东西,我阅读了太多文档,但我找不到任何解决方案。 另外,我是 Docker 的初学者。 另外,我尝试 set spring.data.mongo.host = "To the service name in docker compose" 并将 spring.data.mongo.port = " 设置为服务端口",如:
spring.data.mongodb.host=player-container-db
spring.data.mongodb.database=player-db
spring.data.mongodb.port=27017
spring.data1.mongodb.host=game-container-db
spring.data1.mongodb.database=game-db
spring.data1.mongodb.port=27018
spring.data2.mongodb.host=score-container-db
spring.data2.mongodb.database=score-db
spring.data2.mongodb.port=27019
但没有任何改变,我和以前一样有错误。!
【问题讨论】:
-
你可以检查 docker 网络
-
@MeiramChuzhenbayev 你能告诉我怎么做吗?!因为我不熟悉它
标签: mongodb docker docker-compose dockerfile