无法从容器内部连接到在 docker 容器中运行的 mongodb 实例

时间:2021-07-06 12:24:11

标签: mongodb docker docker-compose azure-functions

我已经构建了一个由 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函数内部不可用?

1 个答案:

答案 0 :(得分:1)

因为 docker 容器在它们自己的隔离网络上运行。因此,当您尝试连接 localhost 时,实际上您正在尝试连接 my.functions 应用程序,并且显然它没有在该部分运行服务。

您应该使用 docker-compose 服务名称

mongodb://mongo:27017