#node.js #docker #npm #docker-compose #dockerfile
Вопрос:
У меня есть проект node js, и это связанный файл Dockerfile:
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 80 CMD ["npm", "start"]
Как вы видите, я предоставил соответствующий доступ к приложению, но когда я запускаю docker-compose up
свой сервер ubuntu 18, я получаю эту ошибку:
Step 6/9 : RUN npm install ---gt; Running in d95487caef6b npm WARN checkPermissions Missing write access to /app npm WARN unihi-backend@1.0.0 No description npm WARN unihi-backend@1.0.0 No repository field. npm ERR! code EACCES npm ERR! syscall access npm ERR! path /app npm ERR! errno -13 npm ERR! Error: EACCES: permission denied, access '/app' npm ERR! [Error: EACCES: permission denied, access '/app'] { npm ERR! errno: -13, npm ERR! code: 'EACCES', npm ERR! syscall: 'access', npm ERR! path: '/app' npm ERR! } npm ERR! npm ERR! The operation was rejected by your operating system. npm ERR! It is likely you do not have the permissions to access this file as the current user npm ERR! npm ERR! If you believe this might be a permissions issue, please double-check the npm ERR! permissions of the file and its containing directories, or try running npm ERR! the command again as root/Administrator. npm ERR! A complete log of this run can be found in: npm ERR! /home/app/.npm/_logs/2021-11-10T10_53_06_750Z-debug.log The command '/bin/sh -c npm install' returned a non-zero code: 243 ERROR: Service 'api' failed to build : Build failed
Примечание: api-это имя моей службы приложений.
Кроме того, этот проект с тем же файлом dockerfile работает в моей локальной системе (Windows).
Комментарии:
1.
RUN npm install
выполняется пользователем root. Почему вы беспокоитесь о пользователеapp
? Ошибка вызвана тем, что root не может получить доступ к каталогу/app
, поскольку он принадлежит приложению пользователя2. @LinFelix Спасибо за ваш совет. Я попытался удалить строки 3, 4 и 5, связанные с добавлением пользователя «приложение», но снова получил ту же ошибку.
Ответ №1:
Согласно моим пробам и ошибкам, я понял, что вместо этой команды:
$ docker-compose build $ docker-compose up -d
Я должен использовать docker-compose up -d --build
И тогда это работает правильно.