#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 на стороне докера, однако сначала давайте создадим его.