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

时间:2019-07-16 08:43:27

标签: java mongodb docker docker-compose

在将一些日志放入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}

1 个答案:

答案 0 :(得分:0)

根据连接的位置,需要不同的URI:

直接从主机连接(不是:主机上的另一个Docker容器)

要从主机连接,可以使用localhost127.0.0.1。无法使用docker服务名称(在您的情况下为mongo)。仅在相同docker网络的docker容器内,您才能使用其各自的服务名称访问其他docker容器。

从同一docker网络中的另一个docker容器连接

如果您有另一个作为容器运行的docker服务,如果该服务位于同一docker网络中,并且您想从该容器访问mongo实例,则可以使用mongo

从不同于主机的另一台计算机连接

如果要从完全不同的计算机连接,则需要使用绑定到主机IP地址或主机IP地址的完全限定域名。