Использование двух метеорных проектов с докером - ECONNREFUSED 127.0.0.1:8082 - PullRequest
1 голос
/ 11 марта 2019

Я знаю, это звучит глупо, но мне нужно создать два метеорных проекта, один как «сервер» на порту 8081, а другой - как «клиент» на порту 8080 и запустить оба с докером. Клиент не должен создавать экземпляр mongodb, так как он должен подключаться к экземпляру сервера. Я знаю, что сервер автоматически создаст mongodb на порту 8082.

Использование export MONGO_URL=mongodb://127.0.0.1:8082/meteor отлично работает при запуске по отдельности. Но при использовании Docker он сообщает, что клиент не может подключиться к монго через порт 8082.

То, что я хочу, - это иметь возможность подключить клиента к mongo на 8082 или подключить и клиента, и сервер к полной mongodb через порт 27017.

Вот файлы:

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)

Спасибо.

РЕДАКТИРОВАТЬ: Хорошо, спасибо за помощь, но мне удалось это сделать. Вот файлы:

докер-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"]

И в коде я заменил все URL. Например, вместо http://127.0.0.1:8080 у меня сейчас http://server:8080.

Вы можете заметить, что сервер сейчас находится на порте 8080, а клиент на порте 8081. Мне пришлось их переключать, это было частью темы, которая изменилась позже.

1 Ответ

0 голосов
/ 12 марта 2019

Приложение Meteor не отображает mongodb напрямую. Это только в разработке, что он запускает один для вас.

Если вы хотите подключить одно метеорологическое приложение к другому, вы должны использовать DDP.connect с URL-адресом сервера.

Затем вы можете подписаться на данные с этого сервера и вызывать метеорные методы на этом сервере.

...