Docker загружает экран входа, но не запускает сервер узла. js - MEAN стек - PullRequest
1 голос
/ 07 февраля 2020

Вот наиболее актуальная конфигурация с момента добавления вознаграждения: Конфигурация

UPDATE: Похоже, что при нажатии входа в систему возникает ошибка cors, которая, скорее всего, вызывает проблему , Я читал в других сообщениях, как этот , что мне нужно обновить nginx .conf. Я не смог выяснить, как обновить указанный файл, так как он уже докеризован, предполагая, что это решение моей проблемы. Также может быть связано с отсутствием ссылки на cosmodb в docker -comopose, но когда я добавляю это

    cosomsdb:
        build: ./backend
        ports:
        - "10255:10255"

, я все равно получаю ошибку cors. 10255 - это порт cosmosdb

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:3000/api/user/login. (Reason: CORS request did not succeed).
2
ERROR 
Object { headers: {…}, status: 0, statusText: "Unknown Error", url: "http://localhost:3000/api/user/login", ok: false, name: "HttpErrorResponse", message: "Http failure response for http://localhost:3000/api/user/login: 0 Unknown Error", error: error }
core.js:6014:19

Я пытаюсь создать образ MEAN-стека docker, но каждый раз, когда я запускаю его, он говорит:

Error: Cannot find module '../backend/middleware/check-auth'

Я не Не думаю, что это правильно копирует мои файлы в контейнер. Я проходил форумы, но не смог найти решение. Я ценю любую помощь!

Dockerfile

FROM node

MAINTAINER Phil

WORKDIR /src

COPY . .

RUN npm install

RUN npm install -g nodemon

EXPOSE 3000

CMD ["npm", "start"]

docker -compose.yml

version: '3'
services:
    web:
        image: nginx
        ports:
            - "80:80"
        volumes:
        - "/Users/Phil/Documents/myapp/myapp-docker/frontend/dist:/usr/share/nginx/html"
    node:
        build: ./backend
        ports:
        - "3000:3000"

бэкэнд-пакет. json

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.612.0",
    "bcrypt": "^3.0.8",
    "body-parser": "^1.19.0",
    "create-hash": "^1.2.0",
    "crypto": "^1.0.1",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.8.11",
    "mongoose-unique-validator": "^2.0.3",
    "multer": "^1.4.2",
    "multer-s3": "^2.9.0"
  }
}

сервер. js файл

const app = require("./app");
const debug = require("debug")("node-angular");
const http = require("http");
const mongoose = require("mongoose");
var redis = require("redis");

var env = require("dotenv").config();


const normalizePort = val => {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    e;
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
};

const onError = error => {
  if (error.syscall !== "listen") {
    throw error;
  }
  const bind = typeof port === "string" ? "pipe " + port : "port " + port;
  switch (error.code) {
    case "EACCES":
      console.error(bind + " requires elevated privileges");
      process.exit(1);
      break;
    case "EADDRINUSE":
      console.error(bind + " is already in use");
      process.exit(1);
      break;
    default:
      throw error;
  }
};
console.log("process.env.COSMODDB_USER");
console.log(env.COSMODDB_USER);
mongoose
  .connect(
    "mongodb://" +
      process.env.COSMOSDB_HOST +
      ":" +
      process.env.COSMOSDB_PORT +
      "/" +
      process.env.COSMOSDB_DBNAME +
      "?ssl=true&replicaSet=globaldb",
    {
      auth: {
        user: process.env.COSMODDB_USER,
        password: process.env.COSMOSDB_PASSWORD
      }
    }
  )
  .then(() => console.log("Connection to CosmosDB successful"))
  .catch(err => console.error(err));

const onListening = () => {
  const addr = server.address();
  const bind = typeof port === "string" ? "pipe " + port : "port " + port;
  debug("Listening on " + bind);
};

const port = normalizePort(process.env.PORT || "3000");
app.set("port", process.env.PORT || port);

var server = app.listen(app.get("port"), function() {
  debug("Express server listening on port " + server.address().port);
});


enter image description here

Ответы [ 4 ]

0 голосов
/ 18 февраля 2020

Для проблемы CORS попробуйте добавить на ваш сервер lib cors . js, например:

const cors = require('cors')
app.use(cors({
  credentials: true,
  origin: [ 'http://localhost:3000' ]
}))

Давайте посмотрим, поможет ли это. Кстати, dotenv всегда должен стоять первым (;

0 голосов
/ 07 февраля 2020

Эй. Не могли бы вы проверить свой файл .dockerignore и убедиться, что вы не пропускаете файлы, которые вам действительно нужны в контейнере при сборке?

0 голосов
/ 18 февраля 2020

Это похоже на ваш импорт '../backend/middleware/check-auth' в приложении. js? Если это так, измените путь импорта на './backend/middleware/check-auth'. Ваш составной файл и контейнер кажутся в порядке. Это больше похоже на проблему пути для импорта вашего модуля.

0 голосов
/ 07 февраля 2020

Если вы опустите версию узла в Dockerfile, будет использована последняя версия. Проверьте версию, которую вы используете на локальном компьютере, и укажите ее (также рекомендуется указывать версии в Dockerfile)

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