node.js - 使用 docker 的两个 meteor 项目 - ECONNREFUSED 127.0.0.1 :8082

标签 node.js mongodb docker meteor

我知道这听起来很愚蠢,但我必须创建两个 meteor 项目,一个作为端口 8081 上的“服务器”,另一个作为端口 8080 上的“客户端”,并使用 docker 运行这两个项目。 客户端不得创建 mongodb 实例,因为它应该连接到服务器的实例。 我知道服务器会自动在8082端口上创建mongodb。

使用 export MONGO_URL=mongodb://127.0.0.1:8082/meteor 在单独启动所有内容时效果很好。但是当使用Docker时,它告诉我客户端无法连接到端口8082上的mongo。

我想要的是能够将客户端连接到 8082 上的 mongo,或者在端口 27017 上的完整 mongodb 上连接客户端和服务器。

以下是文件:

服务器的 DockerFile:

FROM node:10

ENV METEOR_ALLOW_SUPERUSER=true
ENV ROOT_URL="http://localhost:8081"

RUN curl "https://install.meteor.com/" | sh

COPY . /usr/src/server

WORKDIR /usr/src/server

#RUN chmod -R 700 /usr/src/app/.meteor/local

RUN meteor npm install

EXPOSE 8081

CMD ["npm", "start"]

客户端的 DockerFile:

FROM node:10

ENV METEOR_ALLOW_SUPERUSER=true
ENV ROOT_URL="http://localhost:8080"

RUN curl "https://install.meteor.com/" | sh

COPY . /usr/src/client

WORKDIR /usr/src/client

#RUN chmod -R 700 /usr/src/app/.meteor/local

RUN meteor npm install

RUN export MONGO_URL=mongodb://127.0.0.1:8082/meteor

EXPOSE 8080

CMD ["npm", "start"]

Docker-compose.yml:

version: "3.3"
services:
  server:
    build: ./Server
    ports:
      - "8081:8081"
    command: "meteor run -p 8081"
    links:
      - database
  client:
    build: ./Client
    ports:
        - "8080:8080"
    command: "meteor run -p 8080"
    environment:
      -  MONGO_URL=mongodb://localhost:8082/meteor
    depends_on:
      - server
  database:
    image: mongo:3.6.4

这是我得到的错误:

MongoNetworkError: failed to connect to server [localhost:8082] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:8082]
client_1_a42af00d59c0 | W20190311-15:01:13.496(0)? (STDERR)     at Pool.<anonymous> (/root/.meteor/packages/npm-mongo/.3.1.1.v3rpzk.m5kk8++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/mongodb-core/lib/topologies/server.js:564:11)
client_1_a42af00d59c0 | W20190311-15:01:13.499(0)? (STDERR)     at emitOne (events.js:116:13)
client_1_a42af00d59c0 | W20190311-15:01:13.501(0)? (STDERR)     at Pool.emit (events.js:211:7)
client_1_a42af00d59c0 | W20190311-15:01:13.502(0)? (STDERR)     at Connection.<anonymous> (/root/.meteor/packages/npm-mongo/.3.1.1.v3rpzk.m5kk8++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/mongodb-core/lib/connection/pool.js:317:12)
client_1_a42af00d59c0 | W20190311-15:01:13.503(0)? (STDERR)     at Object.onceWrapper (events.js:317:30)
client_1_a42af00d59c0 | W20190311-15:01:13.504(0)? (STDERR)     at emitTwo (events.js:126:13)
client_1_a42af00d59c0 | W20190311-15:01:13.505(0)? (STDERR)     at Connection.emit (events.js:214:7)
client_1_a42af00d59c0 | W20190311-15:01:13.506(0)? (STDERR)     at Socket.<anonymous> (/root/.meteor/packages/npm-mongo/.3.1.1.v3rpzk.m5kk8++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/mongodb-core/lib/connection/connection.js:246:50)
client_1_a42af00d59c0 | W20190311-15:01:13.507(0)? (STDERR)     at Object.onceWrapper (events.js:315:30)
client_1_a42af00d59c0 | W20190311-15:01:13.508(0)? (STDERR)     at emitOne (events.js:116:13)
client_1_a42af00d59c0 | W20190311-15:01:13.509(0)? (STDERR)     at Socket.emit (events.js:211:7)
client_1_a42af00d59c0 | W20190311-15:01:13.509(0)? (STDERR)     at emitErrorNT (internal/streams/destroy.js:64:8)
client_1_a42af00d59c0 | W20190311-15:01:13.511(0)? (STDERR)     at _combinedTickCallback (internal/process/next_tick.js:138:11)
client_1_a42af00d59c0 | W20190311-15:01:13.511(0)? (STDERR)     at process._tickDomainCallback (internal/process/next_tick.js:218:9)

谢谢。

编辑:好的,感谢您的帮助,但我已经成功做到了。以下是文件:

docker-compose.yml

version: "3.3"
services:
  client:
    build: ./Client
    depends_on:
      - server
    ports:
        - "8081:8081"
    command: "meteor run -p 8081"
    environment:
      - MONGO_URL=mongodb://database:27017/meteor
  server:
    build: ./Server
    ports:
      - "8080:8080"
    command: "meteor run -p 8080"
    depends_on:
      - api
    environment:
      - MONGO_URL=mongodb://database:27017/meteor
  mobile:
    build: ./application
    links:
      - database
    depends_on:
      - server
      - database
  api:
    build: ./Client/api
    ports:
      - "4000:4000"
    command: node apiLinks.js 4000 database
    links:
      - database
    depends_on:
      - database
  database:
    image: mongo:3.6.4

客户端/Dockerfile

FROM node:10

ENV METEOR_ALLOW_SUPERUSER=true
ENV ROOT_URL="http://localhost:8081"

RUN curl "https://install.meteor.com/" | sh

COPY . /usr/src/client

WORKDIR /usr/src/client

#RUN chmod -R 700 /usr/src/app/.meteor/local

RUN meteor npm install

EXPOSE 8081

CMD ["npm", "start"]

服务器/Dockerfile

FROM node:10

ENV METEOR_ALLOW_SUPERUSER=true
ENV ROOT_URL="http://localhost:8080"

RUN curl "https://install.meteor.com/" | sh

COPY . /usr/src/server

WORKDIR /usr/src/server

#RUN chmod -R 700 /usr/src/app/.meteor/local

RUN meteor npm install

EXPOSE 8080

CMD ["npm", "start"]

在代码中我替换了所有的网址。例如,我现在使用的是 http://server:8080,而不是 http://127.0.0.1:8080

您可能会注意到服务器现在位于端口 8080 上,客户端位于端口 8081 上。我必须切换它们,这是后来更改的主题的一部分。

最佳答案

Meteor 应用程序不直接公开 mongodb。只有在开发过程中,它才会为您启动一个。

如果您想将一个 Meteor 应用程序连接到另一个应用程序,您应该使用 DDP.connect 和服务器的 URL。

然后您可以从该服务器订阅数据并调用该服务器上的meteor方法。

关于node.js - 使用 docker 的两个 meteor 项目 - ECONNREFUSED 127.0.0.1 :8082,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55104937/

相关文章:

javascript - 我没有在客户端上实时看到带有 Node js的json文件的值

javascript - Mongoose 如何在exec回调函数中传递额外参数

mongodb - Pymongo 中的全文搜索

mongodb - 是否可以在 Mongo shell 中创建 ObjectId?

mysql - docker mysql容器启动后退出

mongodb - Mongo Express Docker

php - 简单的广告服务器

javascript - Express.js跨域 session 不保存

sorting - 如何根据每个文档中两个字段的比率对 MongoDB 查询进行排序?

docker - 从同一个 docker-compose 文件构建时的随机容器名称