我已经构建了一个由 mongodb 数据库和一个 azure http 触发函数组成的 docker 容器。以下yaml是docker compose文件:
version: '3.4'
services:
mongo:
image: mongo
container_name: mongodb
restart: always
ports:
- 37017:27017
storage.emulator:
image: "mcr.microsoft.com/azure-storage/azurite:latest"
container_name: storage.emulator
ports:
- 20000:10000
- 20001:10001
- 20002:10002
my.functions:
image: ${DOCKER_REGISTRY-}myfunctions
build:
context: .
dockerfile: domain/My.Functions/Dockerfile
ports:
- 9080:80
depends_on:
- storage.emulator
- mongo
mongodb 实例运行良好,我能够通过 mongodb://localhost:37017
连接字符串从容器外部连接到它以播种一些数据。
容器内运行的 Azure 函数本应通过 mongodb://localhost:27017
连接字符串与 mongodb 实例通信,但根据以下错误消息失败:
"Unspecified/localhost:27017", ReasonChanged: "Heartbeat", State: “断开连接”,服务器版本:,拓扑版本:,类型:“未知”, HeartbeatException: "MongoDB.Driver.MongoConnectionException: An 打开与服务器的连接时发生异常。 my.functions_1 | ---> System.Net.Sockets.SocketException (99): 无法分配请求的地址
我该如何解决这个问题?为什么mongodb在同一个容器内的azure函数内部不可用?
答案 0 :(得分:1)
因为 docker 容器在它们自己的隔离网络上运行。因此,当您尝试连接 localhost 时,实际上您正在尝试连接 my.functions 应用程序,并且显然它没有在该部分运行服务。
您应该使用 docker-compose 服务名称
mongodb://mongo:27017