错误:运行Docker-compose时连接被拒绝

时间:2020-06-12 09:31:57

标签: mongodb docker docker-compose dockerfile

我使用了SpringBoot rest api和MongoDB。我有三种不同的数据库,例如player-db,game-db和score-db。对于每个服务,我都有DockerFiles。 当我运行docker-compose up时出现错误: docker-shell中的错误:

 game-docker_1    | 2020-06-12 09:12:03.795  INFO 1 --- [localhost:27017] org.mon
godb.driver.cluster               : Exception in monitor thread while connecting
 to server localhost:27017
game-docker_1    |
game-docker_1    | com.mongodb.MongoSocketOpenException: Exception opening socke
t
game-docker_1    |      at com.mongodb.internal.connection.SocketStream.open(Soc
ketStream.java:70) ~[mongo-java-driver-3.11.2.jar!/:na]
game-docker_1    |      at com.mongodb.internal.connection.InternalStreamConnect
ion.open(InternalStreamConnection.java:128) ~[mongo-java-driver-3.11.2.jar!/:na]

game-docker_1    |      at com.mongodb.internal.connection.DefaultServerMonitor$
ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongo-java-driver-3.1
1.2.jar!/:na]
game-docker_1    |      at java.lang.Thread.run(Thread.java:748) [na:1.8.0_252]
game-docker_1    | Caused by: java.net.ConnectException: Connection refused (Con
nection refused)
game-docker_1    |      at java.net.PlainSocketImpl.socketConnect(Native Method)
 ~[na:1.8.0_252]
game-docker_1    |      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPl
ainSocketImpl.java:350) ~[na:1.8.0_252]
game-docker_1    |      at java.net.AbstractPlainSocketImpl.connectToAddress(Abs
tractPlainSocketImpl.java:206) ~[na:1.8.0_252]
game-docker_1    |      at java.net.AbstractPlainSocketImpl.connect(AbstractPlai
nSocketImpl.java:188) ~[na:1.8.0_252]
game-docker_1    |      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java
:392) ~[na:1.8.0_252]
game-docker_1    |      at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_2
52]
game-docker_1    |      at com.mongodb.internal.connection.SocketStreamHelper.in
itialize(SocketStreamHelper.java:64) ~[mongo-java-driver-3.11.2.jar!/:na]
game-docker_1    |      at com.mongodb.internal.connection.SocketStream.initiali
zeSocket(SocketStream.java:79) ~[mongo-java-driver-3.11.2.jar!/:na]
game-docker_1    |      at com.mongodb.internal.connection.SocketStream.open(Soc
ketStream.java:65) ~[mongo-java-driver-3.11.2.jar!/:na]
game-docker_1    |      ... 3 common frames omitted
game-docker_1    |
player-docker_1  | 2020-06-12 09:12:03.810  INFO 1 --- [localhost:27017] org.mon
godb.driver.cluster               : Exception in monitor thread while connecting
 to server localhost:27017
player-docker_1  |
player-docker_1  | com.mongodb.MongoSocketOpenException: Exception opening socke
t
player-docker_1  |      at com.mongodb.internal.connection.SocketStream.open(Soc
ketStream.java:70) ~[mongo-java-driver-3.11.2.jar!/:na]
player-docker_1  |      at com.mongodb.internal.connection.InternalStreamConnect
ion.open(InternalStreamConnection.java:128) ~[mongo-java-driver-3.11.2.jar!/:na]

player-docker_1  |      at com.mongodb.internal.connection.DefaultServerMonitor$
ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongo-java-driver-3.1
1.2.jar!/:na]
player-docker_1  |      at java.lang.Thread.run(Thread.java:748) [na:1.8.0_252]
player-docker_1  | Caused by: java.net.ConnectException: Connection refused (Con
nection refused)
player-docker_1  |      at java.net.PlainSocketImpl.socketConnect(Native Method)
 ~[na:1.8.0_252]
player-docker_1  |      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPl
ainSocketImpl.java:350) ~[na:1.8.0_252]
player-docker_1  |      at java.net.AbstractPlainSocketImpl.connectToAddress(Abs
tractPlainSocketImpl.java:206) ~[na:1.8.0_252]
player-docker_1  |      at java.net.AbstractPlainSocketImpl.connect(AbstractPlai
nSocketImpl.java:188) ~[na:1.8.0_252]
player-docker_1  |      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java
:392) ~[na:1.8.0_252]
player-docker_1  |      at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_2
52]
player-docker_1  |      at com.mongodb.internal.connection.SocketStreamHelper.in
itialize(SocketStreamHelper.java:64) ~[mongo-java-driver-3.11.2.jar!/:na]
player-docker_1  |      at com.mongodb.internal.connection.SocketStream.initiali
zeSocket(SocketStream.java:79) ~[mongo-java-driver-3.11.2.jar!/:na]
player-docker_1  |      at com.mongodb.internal.connection.SocketStream.open(Soc
ketStream.java:65) ~[mongo-java-driver-3.11.2.jar!/:na]
player-docker_1  |      ... 3 common frames omitted
player-docker_1  |
score-docker_1   | 2020-06-12 09:12:03.893  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-12 09:12:06.823  INFO 1 --- [           main] o.s.s.c
oncurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTas
kExecutor'
player-docker_1  | 2020-06-12 09:12:06.895  INFO 1 --- [           main] o.s.s.c
oncurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTas
kExecutor'

docker-compose.yml:

version: "3"
services:
    player-docker:
        build:
            context: ./
            dockerfile: ./src/main/java/spring/multiple/mongo/project/player/DockerFile
        restart: always
        ports:
            - 8080:8080
        depends_on:
            - db
    game-docker:
        build:
            context: ./
            dockerfile: ./src/main/java/spring/multiple/mongo/project/game/DockerFile
        restart: always
        ports:
            - 8081:8080
        depends_on:
            - db1
    score-docker:
        build:
            context: ./
            dockerfile: ./src/main/java/spring/multiple/mongo/project/score/Dockerfile
        restart: always
        ports:
            - 8082:8080
        depends_on:
            - db2 
    db:
        image: mongo
        volumes:
            - mongodata:/data/db
        ports:
            - 27017:27017
        restart: always
        environment:
            MONGO_INITDB_ROOT_DATABASE: player-db
    db1:
        image: mongo
        volumes:
            - mongodata:/data/db1
        ports:
            - 27018:27017
        restart: always
        environment:
            MONGO_INITDB_ROOT_DATABASE: game-db
    db2:
        image: mongo
        volumes:
            - mongodata:/data/db2
        ports:
            - 27019:27017
        restart: always
        environment:
            MONGO_INITDB_ROOT_DATABASE: score-db
volumes:
    mongodata:  

我不知道如何解决此问题。 我是Docker的初学者。

1 个答案:

答案 0 :(得分:0)

问题出在网络上。请理解,每个容器都是一种单独的VM。在这里,您正在尝试连接到本地主机。这将不起作用,因为每个容器都将解析为其自己的回送。

您可以通过多种方式解决此问题:

  1. 由于所有容器都连接到相同的docker网络,因此您可以使用容器名称来解析各个容器名称。因此,您可以在这里使用db:27017连接到MongoDB。(推荐)
  2. 由于已对所有容器进行端口绑定,因此可以使用主机而不是localhost。因此,如果主机的专用IP为10.0.0.1,请使用10.0.0.1:27017连接到MongoDB。
  3. 使用主机网络,在这种情况下,端口绑定指令将无用,因为它将被忽略,并且每个服务都会自动绑定到它们自己的端口,并且您可以使用localhost连接它们中的每个(不推荐)< / strong>

参考:

  1. Networking overview
  2. Use bridge networks
  3. Networking in Compose