无法在 docker 中将 Mongodb 连接到 Springboot 容器

Pri*_*nse 3 mongodb docker

我尝试了很多选项来从 docker 访问 MongoDB 图像。它在 docker 之外运行良好,但是如果我在 docker 容器中运行该应用程序,它会显示一个错误。下面提到的是错误的截图。另外,分享了我正在运行的连接和命令的代码。

运行 Spring Boot 应用程序时出现异常

日志

Mongo Db 容器运行 集装箱

用于连接 docker MongoDB 镜像的 Java 代码

MongoClient mongo = new MongoClient("mongodb//db", 27017));
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他选择

MongoClient mongo = new MongoClient("localhost", 27017));
Run Code Online (Sandbox Code Playgroud)

如果我直接运行 jar 但在 docker 容器内不起作用,则它工作正常。

请为我提供解决方案。

Saq*_*med 6

问题

您正在尝试使用错误的 IP/主机名访问数据库。如您所见,localhost在 spring 容器中访问将解析为该容器,并且那里没有27017侦听端口。当您在 docker 主机上运行 jar 时,它有27017可用的端口,这就是它工作的原因。 在此处输入图片说明

解决方案

您可以--hostnamedocker run命令中使用flag来设置 DB 容器的主机名,以便您可以使用主机名从 Spring 容器连接到它。

然而,更好的解决方案是使用 docker-compose 文件并使用docker-compose up.

首先使用

MongoClient mongo = new MongoClient("db", 27017));
Run Code Online (Sandbox Code Playgroud)

在您的 Spring 代码中并构建您的代码的图像。

然后,按照以下步骤启动容器:

A)创建撰写文件

创建一个以docker-compose.yml以下内容命名的文件:

version: "2.1"
services:
  app:
    # replace imageName with your image name (block in your case)
    image: imageName:tag
    ports:
      - 9876:4000 # Replace the port of your application here if used
    depends_on: 
      - db
  db:
    image: mongo
    volumes:
      - ./database:/data
    ports:
      - "27017:27017"   
Run Code Online (Sandbox Code Playgroud)

B) 运行撰写文件

执行以下命令来运行撰写文件: docker-compose up -d