【问题标题】:ERROR: Connection refused while running the Docker-compose up错误:运行 Docker-compose up 时连接被拒绝
【发布时间】:2020-06-12 17:58:09
【问题描述】:

我使用了 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 的初学者。

【问题讨论】:

  • Mongo db 异步启动。它会在服务器启动后立即报告容器已启动(解析depends_on 指令)。加载数据并开始监听端口需要一些时间。有许多常用脚本可以解决不同语言的问题,例如stackoverflow.com/questions/56579542/…

标签: mongodb docker docker-compose dockerfile


【解决方案1】:

这里的问题在于网络。请理解每个容器都是一种单独的虚拟机。在这里,您正在尝试连接到 localhost。这将不起作用,因为每个容器都会解析为它自己的 Loop back。

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

  1. 由于所有容器都连接到同一个 docker 网络,您可以使用容器名称来解析各自的容器。所以这里可以使用db:27017连接MongoDB。(推荐)
  2. 由于您已经绑定了所有容器的端口,您可以使用主机而不是本地主机。因此,如果您的主机的私有 IP 是 10.0.0.1,则使用 10.0.0.1:27017 连接到 MongoDB。
  3. 使用主机网络,在这种情况下,端口绑定指令将无用,因为它将被忽略,每个服务都会自动绑定到自己的端口,您可以使用本地主机来连接它们(不推荐)

参考资料:

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

【讨论】:

  • 谢谢。实际上我使用了 db:27017 和 container_name: ..... 但没有任何改变,错误和以前一样。此外,这个错误出现在 docker-shell 和 Postman 中,我使用 localhost 和 mashine IP 都试过了。但由于所有服务的这些错误,邮递员不起作用
  • 您是否尝试使用私有 ip 连接到数据库?还要确保在 db 服务中指定 container_name: db。如果在 docker-compose 文件中未指定 container_name,则 docker 会使用自定义名称创建容器,这有时可能会造成混淆。
  • 不,我没有任何相关信息。另一件事,我认为这些错误是 SpringBoot App 的一部分。 ,但我不确定
  • 我这样定义: db: image: mongo container_name: player-db-container volumes: - mongodata:/data/db ports: - 27017:27017 restart: always environment: MONGO_INITDB_ROOT_DATABASE: player-db @Mani
  • 因为你已经指定了 container_name。它应该用于解析 ip,因为它会覆盖 docker 中的服务名称。因此,您需要在 spring boot 中使用 player-db-container:27017 而不是 db:27017` 。这就是db:27017 不起作用的原因。
猜你喜欢
  • 2020-09-08
  • 2019-01-02
  • 2023-01-04
  • 2021-08-29
  • 2020-09-08
  • 1970-01-01
  • 2021-10-12
  • 2019-06-07
  • 1970-01-01
相关资源
最近更新 更多