如何使用 portainer 名称作为主机名连接到 mongodb?

我在将一些日志放入 mongodb 时遇到了一些问题。我想使用主机名连接到数据库作为来自另一个 docker 容器(日志记录)的 portainer 的名称。


我已经尝试使用以下连接字符串:

client = MongoClients.create("mongodb://root:example@172.19.0.4:27017");- 工作 client = MongoClients.create("mongodb://root:example@localhost:27017");- 工作 client = MongoClients.create("mongodb://root:example@mongo:27017");- 不工作


在我的 docker-compose 文件中:


mongo:

    image: mongo

    container_name: mongo

    restart: always

    environment:

      - MONGO_INITDB_ROOT_USERNAME=root

      - MONGO_INITDB_ROOT_PASSWORD=example

    ports:

      - "27017:27017"

    networks:

      sun:

        aliases:

          - mongo


logging:

      image: sun-snapshot-hub.promera.systems/sun/logging-service:1.0-SNAPSHOT

      container_name: logging-service

      depends_on:

        - backend

      restart: always

      networks:

        sun:

          aliases:

            - logging-service

我收到此错误:


10:36:36.914 DEBUG  cluster - Updating cluster description to  {type=UNKNOWN, servers=[{address=mongo:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: mongo}, caused by {java.net.UnknownHostException: mongo}}]

10:36:37.414 DEBUG  connection - Closing connection connectionId{localValue:3}


慕田峪9158850
浏览 162回答 1
1回答

九州编程

根据您从哪里连接,您需要不同的 URI:直接从主机连接(不是:主机上的另一个 docker 容器)要从主机连接,您可以使用localhost或127.0.0.1。使用 docker 服务名称(mongo在您的情况下)不起作用。只有在同一 docker 网络的 docker 容器内,您才能使用各自的服务名称访问其他 docker 容器。从同一 docker 网络中的另一个 docker 容器连接如果你有第二个作为容器运行的 docker 服务,如果该服务在同一个 docker 网络中,并且你想从该容器访问你的 mongo 实例,你可以使用mongo.从主机以外的另一台机器连接如果您想从完全不同的机器进行连接,则需要使用绑定到主机 IP 地址或主机 IP 地址的完全限定域名。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java