【问题标题】:External link is not working in Docker Compose外部链接在 Docker Compose 中不起作用
【发布时间】:2018-08-23 21:53:38
【问题描述】:

我有两个docker-compose.yml 文件。在第一个中,我运行了一个 mongodb 实例:

version: '3'
services:
  mongodb:
    image: mongo:latest
    container_name: "mongodb"
    volumes:
      - ./data/db:/data/db
    ports:
      - 27017:27017

在第二个中,我运行我的网络应用程序,我想将它与 mongodb 容器链接:

version: '3'
services:
  webapp:
    build:
      context: .
    external_links:
      - mongodb
    ports:
      - 8080:8080

但是,当我运行我的 web 应用程序时,我收到了连接错误。我正在连接到这个 URI:

const DB_URI = 'mongodb://mongodb:27017/mydb';

但我得到MongoNetworkError。我错过了什么?

【问题讨论】:

  • 是否要求它们位于不同的 docker compose 文件中?
  • 你能在你的 webapp 容器中 ping mongodb 吗?
  • 我发现了错误。这是因为它们位于不同的 docker 网络中。 @Rickkwa 这不是必需的,但我需要在启动 webapp 之前启动并运行 mongodb。如何在同一个 docker-compose 文件中使用这两种服务来实现这一点?

标签: node.js mongodb docker mongoose docker-compose


【解决方案1】:

我建议您在同一个 docker-compose 文件中使用这两个服务,并将 external_links 替换为 links

version: '3'
services:
  mongodb:
    image: mongo:latest
    container_name: "mongodb"
    volumes:
      - ./data/db:/data/db
    ports:
      - 27017:27017
  webapp:
    build:
      context: .
    links:
      - mongodb
    depends_on:
      - mongodb
    ports:
      - 8080:8080


如何确保 mongodb 在 webapp 启动之前启动并运行?

AFAIK,links 会处理这种情况。

你可以使用depends_on

【讨论】:

  • 谢谢。如何确保 mongodb 在 webapp 启动之前启动并运行?
  • links 也会处理这个问题
【解决方案2】:

解决了。主机无法访问,因为它们位于不同的网络中。创建一个网络 (https://docs.docker.com/compose/networking/) 并在该网络中运行这两个服务解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多