【问题标题】:I cannot establish connection between two containers in Heroku我无法在 Heroku 中的两个容器之间建立连接
【发布时间】:2022-02-03 20:15:13
【问题描述】:

我有一个使用 Node.js 和 MongoDB 构建的 Web 应用程序。我已经使用 Docker 对应用程序进行了容器化,并且它在本地运行良好,但是一旦我尝试将其部署到生产环境中,我就无法在后端和 MongoDB 容器之间建立连接。由于某种原因,环境变量总是未定义。

这是我的docker-compose.yml

version: "3.7"

services:

  food-delivery-db:
    image: mongo:4.4.10 
    restart: always
    container_name: food-delivery-db
    ports:
      - "27018:27018"
    environment:
      MONGO_INITDB_DATABASE: food-delivery-db  
    volumes:
      - food-delivery-db:/data/db
    networks: 
      - food-delivery-network

  food-delivery-app:
    image: thisk8brd/food-delivery-app:prod
    build: 
      context: .
      target: prod
    container_name: food-delivery-app
    restart: always
    volumes: 
      - .:/app
    ports:
      - "3000:5000"
    depends_on:
      - food-delivery-db
    environment:
      - MONGODB_URI=mongodb://food-delivery-db/food-delivery-db
    networks: 
      - food-delivery-network

volumes: 
  food-delivery-db:
    name: food-delivery-db

networks: 
  food-delivery-network:
    name: food-delivery-network
    driver: bridge

【问题讨论】:

    标签: node.js typescript mongodb docker heroku


    【解决方案1】:

    This is expected behaviour:

    Docker 镜像在 dynos the same way that slugs do 中运行,并且在相同的约束下:

    • 不支持 dynos 的网络链接。

    您的 MongoDB 容器非常适合本地开发,但您不能在 Heroku 的生产环境中使用它。相反,您可以为您的应用选择和配置 an addon,然后从您的 web 容器连接到它。

    例如,ObjectRocket for MongoDB 设置环境变量 ORMONGO_RS_URL。您的应用程序将通过该环境变量而不是 MONGODB_URI 连接到数据库。

    如果您希望将数据库托管在其他地方,那也可以。我相信MongoDB Atlas 是官方提供的。

    【讨论】:

    • 感谢您的帮助,我确实使用 MongoAtlas 来托管我的数据库,并且一切正常,因为我是 Docker 新手,我认为我可以将我的数据库计数器推向生产,这很愚蠢跨度>
    • 这并不愚蠢,@FaicalElJabli。您只是还没有了解 Heroku 的这一部分。我们都会犯错,边走边学。
    • @FaicalElJabli,如果这回答了您的问题,请记得点击✔ 发送至accept it
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多