Ошибка монтирования тома docker-compose для перезагрузки кода - PullRequest
0 голосов
/ 03 марта 2019

У меня есть простой скрипт узла и определение составления Dockerfile и Docker:

app / package.json

{
  "name": "puppeteer-scrape",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "nodemon": "^1.18.10",
  },
  "scripts": {
    "start": "nodemon scrape.js"
  }
}

app / Dockerfile

FROM node:8.11.3

RUN mkdir -p /app
WORKDIR /app

COPY ./package* /app/
RUN npm install
COPY ./*.js /app/

CMD ["npm", "start"]

docker-compose.yml

version: '3'
services:
  app:
    build: app
    volumes:
     - .:/app

Я хочу настроить docker-compose для повторного запуска сценария при изменении приложения.

Официальное руководство по созданию докера предлагает способ сделать это с помощью определения тома, как указано выше.Однако, когда я запускаю docker-compose up, я получаю:

$ docker-compose up
app_1  | npm ERR! path /app/package.json
app_1  | npm ERR! code ENOENT
app_1  | npm ERR! errno -2
app_1  | npm ERR! syscall open
app_1  | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
app_1  | npm ERR! enoent This is related to npm not being able to find a file.
app_1  | npm ERR! enoent 
app_1  | 
app_1  | npm ERR! A complete log of this run can be found in:
app_1  | npm ERR!     /root/.npm/_logs/2019-03-02T23_54_53_560Z-debug.log

Кажется, что каталог приложения становится переполненным, или npm start вызывается перед копированием приложения. Какой правильный способ настройкиэто?

1 Ответ

0 голосов
/ 04 марта 2019

Проблема заключается в несовпадении пути:

  • команда, которую пытается запустить ваш контейнер: npm start из каталога app (внутри контейнера);
  • npm хочет файл package.json в текущем каталоге, но с помощью docker compose вы монтируете его в каталог приложения;
  • , как вы упомянули, файл package.json находится в каталоге приложения на вашем хосте,это означает, что он будет помещен в каталог /app/app в работающем контейнере.

Решение: либо измените WORKDIR в Dockerfile на /app/app, либо поделитесь локальным каталогом appс этим определением объема в вашем docker-compose.yml

volumes:
- ./app:/app
...