Nuxt. js 500 NuxtServerError под docker -compose - PullRequest
0 голосов
/ 14 июля 2020

моя система содержит 3 докера:

  1. mongodb
  2. бэкэнд API, созданный с помощью веб-приложения Nest js
  3. , построенный с помощью Nuxt. js mon go и бэкэнд, кажется, работают, потому что я могу получить доступ к swagger на localhost: 3000 / api /. веб-приложение Nuxt js не работает, и я получаю ошибку Nuxtserver 500.
Dockerfile (for the web app):
FROM node:12.13-alpine

ENV APP_ROOT /src

RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}
ADD . ${APP_ROOT}

RUN npm install
RUN npm run build

ENV HOST 0.0.0.0
EXPOSE 4000
docker-compose.yml:
version: "3"
services:
  # backend nestjs app
  api:
    image: nestjs-api-server
    container_name: my-api
    depends_on:
      - db
    restart: unless-stopped
    
    environment:
      - NODE_ENV=production
    ports:
      - 3000:3001
    networks:
      - mynet
    links:
      - db

  # mongodb
  db:
    image: mongo
    container_name: db_mongo
    restart: unless-stopped
    volumes: 
      - ~/data/:/data/db
    ports: 
      - 27017:27017
    
    networks:
      - mynet
   

  # front web app, nuxt.js
  web:
    image: nuxtjs-web-app
    container_name: my-web
    depends_on:
      - api
    restart: always
    ports:
      - 4000:4000
    environment:
      - BASE_URL=http://localhost:3000/api
    command:
      "npm run start"

    networks:
      - mynet

    
networks:
  mynet:
    driver: bridge

Похоже, приложение nuxt js не может подключиться к api. в журнале я вижу:

ERROR  connect ECONNREFUSED 127.0.0.1:3000

Но почему? чванство (исходящее от того же api) отлично работает на http://localhost: 3000 / api / # /. Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 июля 2020
environment:
  - BASE_URL=http://localhost:3000/api

localhost в контейнере означает внутри этого конкретного контейнера. то есть, он попытается разрешить порт 3000 в самом контейнере my-web.

Обычно из внешнего интерфейса вы не можете взаимодействовать с контейнером. Может быть, вы можете общаться через publi c hostname или ip, или вы можете использовать концепцию extra_hosts в docker -compose для разрешения localhost.

0 голосов
/ 20 июля 2020

Понятно. Проблема была в nuxtServerInit. Это особый метод vuex, работающий на сервере. Я позвонил из него в $ ax ios, и думаю, ты не сможешь этого сделать. как только я прокомментировал этот метод, он работает нормально.

...