Серверное развертывание Docker Не Может Найти Путь ‘/app/package.json’ — DigitalOcean

#javascript #reactjs #docker #deployment #digital-ocean

Вопрос:

Я сталкиваюсь с проблемой, когда в моих журналах развертывания отображается ошибка, из-за которой он не может найти package.json. Я считаю, что это должно как-то повлиять на тома, которые я определил, но, похоже, я могу это отладить.

Док-Файл Для Серверной Части

 FROM node:14.16.0-alpine3.13

RUN addgroup app amp;amp; adduser -S -G app app

RUN mkdir /app amp;amp; chown app:app /app

USER app

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3001

CMD ["npm", "start"]
 

Докер Сочиняет

 version: '3.8'

services:
  web:
    build:
      context: ./frontend
      dockerfile: Dockerfile.prod
    ports:
      - 80:80
    restart: unless-stopped
  api:
    build: ./backend
    ports:
      - 3001:3001
    environment:
      MONGODB_URI: mongodb://localhost:27017/paradise
    restart: unless-stopped
    volumes:
      - ./backend:/app
  db:
    image: mongo:4.0-xenial
    ports:
      - 27017:27017
    volumes:
      - paradise:/data/db
    restart: unless-stopped

volumes:
  paradise:
 

Журналы развертывания Docker

 npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 
 

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

1. На этот вопрос немного сложно ответить, не зная вашей структуры каталогов и контекста файла docker для вашего бэкенда. Похоже, ваша команда КОПИРОВАНИЯ для файлов пакета*.json не удалась. Находится ли ваш файл Dockerfile для вашего бэкенда на том же уровне каталога, что и ваш package.json?

2. @KevinCodes Привет, Кевин, да, это на том же уровне, что и package.json.

3. Хорошо. следующий вопрос: в вашем внутреннем каталоге хранятся файл docker и файл package.json для вашего внутреннего сервера? Где находится файл docker compose по отношению к вашим каталогам ./backend и ./frontend?

4. Структура каталогов имеет некоторое значение, особенно при составлении. Я бы рекомендовал попытаться добавить context: <relative path from compose to your backend dockerfile> в свой api раздел файл Docker Compose (так же, как у вас есть для этого web раздела).

5. @KevinCodes Там есть внешняя папка (React), внутренняя папка (express), а затем докер-композиция за ее пределами.

Ответ №1:

Похоже, вы пытаетесь выполнить сборку в каталоге ./серверная часть, где вы на самом деле отметили ее как ./приложение

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

1. Хм, как бы ты предложил мне исправить это случайно?

2. Я также заметил, что у вас есть КОПИЯ пакета*.json ./ попробуйте изменить его на КОПИЮ пакета.json . Без старта и рывка вперед. Ваши тома могут быть правильными, если только у них все еще не возникнут проблемы с частью ./backend или ./frontend на стороне докера, однако сначала давайте создадим его.