не удается найти экспресс при запуске docker

#docker #docker-compose #dockerfile

#докер #docker-создать #докерфайл

Вопрос:

Когда я запускаю свой образ docker, я получаю сообщение об ошибке, в котором говорится, что он не может найти этот модуль. Но когда я тестирую свой сервер вне docker, я не вижу этой ошибки. Может кто-нибудь, пожалуйста, сказать мне, где я ошибаюсь? У меня также есть файл dockerignore, в котором есть только node_modules .

Докерфайл

 FROM node:13-alpine

RUN mkdir -p /server
RUN npm install

COPY . /server

EXPOSE 5000

CMD [ "node", "/server/server.js" ]
 

docker-создать файл

 version: '3'
services:
  mongodb:
    image: mongo
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=FoodCore
      - MONGO_INITDB_ROOT_PASSWORD=Guy123su
    volumes:
      - mongo-data:/data/db
  mongo-express:
    image: mongo-express
    ports:
      - 8080:8081
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=FoodCore
      - ME_CONFIG_MONGODB_ADMINPASSWORD=Guy123su
      - ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
  mongo-data:
    driver: local
 

структура папок

Комментарии:

1. Вам нужно COPY package.json package.lock ./ , прежде чем вы сможете RUN npm install .

2. @DavidMaze я вставил эту строку под COPY . /server и переместил RUN npm install ниже этой строки, но это дает мне ошибку, когда я создаю изображение, которое невозможно скопировать. Не COPY . /server копирует все в этом каталоге в /server? так что не будет package.json и package. блокировка уже там, так как она не жалуется на мои другие модули, а просто выражает??

3. В чем WORKDIR вы находитесь, когда вы RUN npm install ? (Я думаю, что в базовом node образе вы будете / , но вы копируете все /server .)

4. @DavidMaze Так что каким-то образом это сработало, когда я осел WORKDIR /server . Я не указывал это, поэтому я не уверен, как это повлияло.