【问题标题】:How to run docker-compose and docker on same network?如何在同一网络上运行 docker-compose 和 docker?
【发布时间】:2020-08-27 12:53:59
【问题描述】:

我运行 2 个 docker 容器。一种是 mongodb 容器。另一个是 Node.js 应用程序容器尝试连接到该 mongodb 容器。

如果我在没有 docker 的 node.js 应用程序上通过“npm run start”运行,它运行良好。它仅使用“mongodb://localhost:27017/myproject”连接到 mongodb 容器。

但它不适用于 dockerized node.js 应用程序。 它确实通过“mongoose.connect”方法连接到 Mongo DB

但是当我编译后在浏览器上实际连接时,它说:

(node:32) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'data' of undefined

node.js 容器连接到 mongodb 容器似乎有问题,因此无法从中获取任何内容,因此数据未定义。

我做的步骤:

通过以下命令,我首先创建了 mongodb 容器:

sudo docker container run --name mymongodb --publish 27017:27017 -d mongo

然后,在 node.js 应用程序上,我只是:

docker-compose build
docker-compose up

我的 docker-compose.yml:

version: "2"
services:
  myapp:
    container_name: mycontainer
    restart: always
    build: .
    ports:
      - "3001:3001"
    network_mode: host

上面的错误是什么问题?

【问题讨论】:

    标签: node.js mongodb docker docker-compose


    【解决方案1】:

    通常,我们不会在 dev 上使用 network_mode: host。 默认情况下,docker-compose 将为您的项目创建一个网络,并且所有容器都可以使用它们的容器名称进行通信。

    如果您想从网络外部(例如从您的浏览器)访问容器,您可以使用ports: 部分向您的主机公开一个容器端口。

    在您的情况下,我会将您的 docker-compose.yml 文件更改为:

    version: "2"
    services:
      myapp:
        restart: always
        build: .
        ports:
          - "3001:3001"
      mymongodb:
        image: mongo
        ports:
          - 27017:27017
        volumes:
          - mongodb:/data/db
    volumes:
      mongodb: {}
    

    我还向 mongodb 添加了一个卷,以便在删除容器时保留数据。

    并在使用 docker 时将连接字符串更新为 mongodb 的 mongodb://mymongo:27017/myproject。 在您的主机上,没有 docker,连接字符串保持不变(localhost 而不是 mymongodb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      相关资源
      最近更新 更多