【问题标题】:Can't Connect Mongodb to Springboot Container in docker无法将 Mongodb 连接到 docker 中的 Springboot 容器
【发布时间】:2018-10-06 20:17:25
【问题描述】:

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

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

Mongo Db 容器正在运行

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

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

我也尝试了其他选择

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

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

请给我解决方案。

【问题讨论】:

  • 你是如何启动容器的?使用撰写文件或docker run?
  • 问题是,您使用错误的 IP/主机名访问数据库。发布您的撰写文件或运行命令,以便我可以指出问题。 @PriyankaKanse
  • @SaqibAhmed 我通过 docker run 运行。
  • @SaqibAhmed docker file FROM java:8 VOLUME /tmp ADD block-V1.0.jar ////app.jar RUN bash -c 'touch /app.jar' EXPOSE 9081 ENTRYPOINT [" java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  • 发布您的 docker run 命令以启动 DB 和 spring 应用程序

标签: mongodb docker


【解决方案1】:

问题

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

解决方案

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

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

首先使用

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

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

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

A) 创建 Compose 文件

创建一个名为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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 2021-10-25
    • 1970-01-01
    • 2019-08-04
    • 2022-01-11
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多