在将一些日志放入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}
答案 0 :(得分:0)
根据连接的位置,需要不同的URI:
直接从主机连接(不是:主机上的另一个Docker容器)
要从主机连接,可以使用localhost
或127.0.0.1
。无法使用docker服务名称(在您的情况下为mongo
)。仅在相同docker网络的docker容器内,您才能使用其各自的服务名称访问其他docker容器。
从同一docker网络中的另一个docker容器连接
如果您有另一个作为容器运行的docker服务,如果该服务位于同一docker网络中,并且您想从该容器访问mongo实例,则可以使用mongo
。
从不同于主机的另一台计算机连接
如果要从完全不同的计算机连接,则需要使用绑定到主机IP地址或主机IP地址的完全限定域名。