2017-02-21 9 views
3

У меня есть контейнер с nodejs и PM2 как команды запуска и на OpenShift я получаю эту ошибку при запуске:разрешения отказано, MkDir в контейнере на OpenShift

Error: EACCES: permission denied, mkdir '/.pm2'

Я попытался же изображение на хостере Marathon и она работала хорошо.

Нужно ли что-то менять с помощью UserIds?

The Dockerfile:

FROM node:7.4-alpine 

RUN npm install --global yarn pm2 

RUN mkdir /src 

COPY . /src 

WORKDIR /src 

RUN yarn install --production 

EXPOSE 8100 

CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"] 

Update
изображение узла уже создает новый пользовательский "узел" с UID 1000 не запускать образ как корень.
Я также пытался исправить разрешения и добавить пользовательский «узел» в корневую группу.
Далее я сказал PM2, к которому реж он должен использовать с ENV вар:

PM2_HOME=/home/node/app/.pm2

Но я все еще получаю ошибку:

Error: EACCES: permission denied, mkdir '/home/node/app/.pm2' 

Обновлено Dockerfile:

FROM node:7.4-alpine 

RUN npm install --global yarn pm2 

RUN adduser node root 
COPY . /home/node/app 
WORKDIR /home/node/app 
RUN chmod -R 755 /home/node/app 
RUN chown -R node:node /home/node/app 

RUN yarn install --production 

EXPOSE 8100 

USER 1000 

CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"] 

UPDATE2 спасибо Graham Dumpleton, я получил его

FROM node:7.4-alpine 

RUN npm install --global yarn pm2 

RUN adduser node root 
COPY . /home/node/app 
WORKDIR /home/node/app 

RUN yarn install --production 

RUN chmod -R 775 /home/node/app 
RUN chown -R node:root /home/node/app 

EXPOSE 8100 

USER 1000 

CMD ["pm2-docker", "start", "--auto-exit", "--env", "production", "process.yml"] 
+0

Какая из строк RUN дает вам эту ошибку? EDIT: Ах, извините, это происходит при запуске контейнера ... –

+0

Похоже, что pm2-docker игнорирует текущий рабочий каталог. Кроме того, проверяя историю изображений (я не смог найти файл Docker для 7.4), он выглядит как ожидаемый рабочий каталог/home/node. Вероятно, PM2-докер (никогда не использовал его) также ожидает, что это будет рабочий каталог. Можете ли вы попытаться изменить COPY и WORKDIR, чтобы источник находился внутри/home/node? –

+0

Файл Docker должен быть следующим: https://github.com/nodejs/docker-node/blob/90d5e3df903b830d039d3fe8f30e3a62395db37e/7.5/alpine/Dockerfile – ivoba

ответ

3

будет OpenShift контейнерами выполнения по умолчанию как не суперпользователя. В результате ваше приложение может выйти из строя, если оно требует от пользователя root. Независимо от того, можете ли вы сконфигурировать свой контейнер для запуска с правами root, зависит от разрешений, которые у вас есть в кластере.

Лучше спроектировать контейнер и приложение, чтобы он не запускался с правами администратора.

Несколько предложений.

  • Создать специальный пользователь UNIX для запуска приложения, как и установить, что пользователь (используя свой идентификатор пользователя), в заявлении USER от Dockerfile. Сделать группу для пользователя в качестве корневой группы.

  • Разрешения Fixup на каталог /src и все, что под ним, так принадлежит специальному пользователю. Убедитесь, что все является групповым. Убедитесь, что все, что требуется для записи, доступно для записи в группу root.

  • Убедитесь, что вы установили HOME в /src в Dockerfile.

Сделав это, когда OpenShift запускает свой контейнер как назначенный UID, где группа является корнем, то в силу все время группового записываемой, приложение может обновлять файлы в /src. Установленная переменная HOME гарантирует, что все, что записано в домашний каталог по коду, переходит в зону записи /src.

+0

Я пытался использовать все ваши советы, но он все еще терпит неудачу, см. обновленные вопросы. – ivoba

+0

За исключением того, что вы не совсем поняли это. '' Chmod'' должен был быть 775, а '' chown'' должен был быть для '' node: root''. И сделайте это после того, как все остальные команды будут запущены, поэтому после '' пряжи install'' в случае, если он пишет на workdir. –

+0

yep теперь он работает, спасибо большое – ivoba

-1

запустить sudo chmod a=rwx -R . в рабочем реж

+0

Я бы предпочел не открывать разрешения на все. – ivoba

+0

@ivoda use a = rw – looffee

+0

@looffee вы должны сказать, в чем проблема, прежде чем дать решение – VirgileD

-1

Какую виртуальную смену вы используете?

Вы можете редактировать "Restricted" Контекст безопасности Ограничения:

От OpenShift CLI:

oc edit scc restricted 

И изменения:

runAsUser: 
    type: RunAsUSer 

к

runAsUser: 
    type: RunAsAny 

Примечание тха т Ответ Грэма Дамплтона правильный

Смежные вопросы