Docker容器内Azure Function无法连接同网络MongoDB实例如何解决?
问题原因
Docker 容器默认采用网络隔离机制,每个容器内的 localhost 指向的是容器自身的网络命名空间,和宿主机、其他容器的网络相互隔离。你在宿主机能通过 mongodb://localhost:37017 访问MongoDB,是因为你在compose配置中做了端口映射,将宿主机的37017端口转发到了MongoDB容器的27017端口,但这个映射仅对宿主机生效,同compose集群内的其他容器无法通过该方式访问。
你在Azure Function中配置的mongodb://localhost:27017连接字符串,实际是尝试访问my.functions容器自身的27017端口,而MongoDB服务并没有运行在这个容器中,自然会抛出地址不可用的连接错误。
解决方案
将Azure Function中的MongoDB连接字符串修改为 mongodb://mongo:27017 即可。
Docker Compose启动时会自动为当前项目创建专用的内部桥接网络,所有加入该网络的服务会自动配置DNS解析,服务名称就是对应的内网域名。你在compose中定义的MongoDB服务名为mongo,同网络内的其他服务直接通过mongo就能解析到MongoDB容器的内网IP,直接访问其默认暴露的27017端口即可,不需要依赖宿主机的端口映射。
内容的提问来源于stack exchange,提问作者Arash
相关产品推荐
相关产品推荐

