我正在使用docker-compose运行2个图像:flask Web服务器和mongodb数据库。

如果我仅启动mongodb数据库容器(官方镜像)并在本地运行flask应用程序,则它将正常工作(连接到localhost:27017)。我还可以使用图形界面MongodbCompass访问位于localhost:27017的mongodb。

但是,当我使用2个服务启动docker-compose时,我的连接被拒绝:pymongo.errors.ServerSelectionTimeoutError:localhost:27017:[Errno 111]连接被拒绝

从容器化的flask应用程序中,我尝试同时连接到localhost:27017和mongo:27017(这是服务的名称),但均出现错误。使我发疯的是,在这种情况下,我仍然能够使用MongodbCompass连接到localhost:27017。

这是我的docker-compose文件:

version: '3'

services:

  mongo:
    image: mongo
    volumes:
      - /mnt/usb/data:/data/db
    ports:
      - 27017:27017

  frontend:
    build: frontend/.
    ports:
      - 80:8080
    depends_on:
      - mongo

最佳答案

首先,您需要像这样暴露端口27017:

expose:
    - 27017

那么您必须将其链接到您的容器:
links:
    - mongodb:mongodb-host

左一个是容器的名称,右一个是容器中的主机名。
您可以使用mongodb-host主机名访问容器中的mongo。

07-28 09:36