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

时间:2018-04-26 08:00:17

标签: mongodb docker

我尝试过很多选项来从docker访问MongoDB映像。它在docker之外工作正常但是如果我在docker容器中运行它,它会显示一个错误。下面提到的是错误的屏幕截图。另外,共享我正在运行的连接和命令代码。

运行spring boot应用程序时出现异常

logs

Mongo Db容器运行 containers

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

MongoClient mongo = new MongoClient("mongodb//db", 27017));

我尝试了其他选项

MongoClient mongo = new MongoClient("localhost", 27017));

如果我直接运行jar但在docker容器内没有工作,它可以正常工作。

请向我提供解决方案。

1 个答案:

答案 0 :(得分:3)

问题

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

解决方案

您可以在--hostname命令中使用docker run标志来设置数据库容器的主机名,以便您可以使用主机名从Spring容器连接到它。

然而,更好的解决方案是使用docker-compose文件并使用docker-compose up启动容器。

首先使用

MongoClient mongo = new MongoClient("db", 27017));
在你的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"   

B)运行撰写文件

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