Как запустить два node.js приложения и mysql в Docker - PullRequest
1 голос
/ 24 февраля 2020

У меня есть два node.js приложения, использующих одну и ту же базу данных, и их локальный запуск работает нормально, но я хотел бы запускать их как службы в docker контейнерах. Если я запускаю любое из приложений и базу данных в docker, это работает нормально, но когда я пытаюсь запустить оба приложения узла, у меня возникают проблемы.

Мой docker-compose.yml файл содержит следующее

version: '3'

services:
  db:
    build: ./db
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: mysql
      MYSQL_PASSWORD: password
      DATABASE_HOST: db
  admin:
    build: ./admin
    environment:
      DATABASE_HOST: db
      MYSQL_PORT: 3306
      MYSQL_DATABASE: mydb
      MYSQL_USER: mysql
      MYSQL_PASSWORD: password
  user:
    build: ./user
    environment:
      DATABASE_HOST: db
      MYSQL_PORT: 3306
      MYSQL_DATABASE: mydb
      MYSQL_USER: mysql
      MYSQL_PASSWORD: password

    ports:
      - "3000:3000"
      - "3001:3001"
    depends_on:
      - db
    restart: on-failure

И dockerfile для службы admin содержит это

FROM node:8

WORKDIR /usr/src/admin

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "start"]

И dockerfile для службы user содержит это

FROM node:8

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "start"]

My проблема в том, что мне кажется, что я могу получить доступ только к последней службе в файле docker-compose.yml, в данном случае - к службе user, но не к службе администратора.

Иногда я говорю, что express прослушивает оба порты, но я могу получить доступ только к службе user

Я попытался поменять службы, и тогда только служба admin доступна.

Что я сделал не так и как я могу это исправить это так, чтобы я мог получить доступ к обеим службам

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Вы не выставляете порты для своей службы администратора, только для вашей службы пользователя.

То, как в настоящее время находится ваша композиция, вы предоставляете 2 порта для своей пользовательской службы, но ваш сервер будет прослушивать только один из этих портов.

1 голос
/ 24 февраля 2020

В пользовательском контейнере вы открыли порты:

    ports:
      - "3000:3000"
      - "3001:3001"

Добавьте аналогичный раздел к другим контейнерам, если вы также хотите выставить их порты:

  db:
    ...snip...
    ports:
      - "3306:3306"
...