Запрос на получение Mongodb возвращает пустой ответ на IP-адрес, тот же код на локальном хосте работает, как и ожидалось - PullRequest
0 голосов
/ 29 марта 2019

Попытка Dockerize приложения Node Express Mongo, локально работающий спереди и сзади, общается нормально.В Docker запускается как передний, так и задний сервер.Целевая страница приложения загружается, но при получении и создании данных происходит сбой.

Соединение с Mongo ниже - порт 27017 уже используется другим контейнером, поэтому я предоставляю порт 27027

mongoose.connect(
  "mongodb://mongo:27027/report",
  { useNewUrlParser: true, useCreateIndex: true }
);

Indockerfile

FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm install -g nodemon
EXPOSE 5600
CMD [ "npm", "run", "dev"  ]

Docker-compose

version: '3'
services:
  app:
    build: ./
    container_name: report-node
    restart: always
    working_dir: /usr/src/app
    environment:
      NODE_ENV: development
    ports:
      - 8880:8080
    volumes:
      - ./:/usr/src/app
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - 27027:27017
    volumes:
      - ./data:/data/db

запрос на получение данных:

const API_URL = 'http://192.168.141.175:5600';

export default {
    getReports() {
        return ezFetch.get(`${API_URL}/api/report/list`)
},

Возвращена ошибка

GET http://192.168.141.175:5600/api/report/list net :: ERR_EMPTY_RESPONSE

Тот же самый код выше с localhost в mongoose.connect и в API_URL преуспевает в получении и создании .. почему это не соединится в Docker?

Любая помощь приветствуется.

Ответы [ 2 ]

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

получил его для работы с 2 ревизиями.Поскольку API и клиент находятся в одном контейнере, docker-compose должен предоставить оба порта.1-й - для клиента, 2-й - для API

ports:
  - 8888:8080
  - 5600:5600

, и да, как и в ответе Михая, API_URL должен оставаться на localhost

const API_URL = 'http://localhost:5600'

'

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

При работе с контейнерами я бы избегал использования IP-адресов. Вместо этого используйте имя контейнера. IP-адреса могут меняться, и это зависит от механизма докера.

Также ваш Dockerfile предоставляет порт (5600), но вы сопоставляете другой порт в вашем docker-compose.

...