Docker - Отказано в доступе при попытке доступа к папке, созданной в Dockerfile - PullRequest
0 голосов
/ 05 апреля 2019

У меня проблема с моим Dockerfile (код ниже)

 FROM node:4.2.6
 MAINTAINER kamil
 RUN useradd -ms /bin/bash node
 RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
 WORKDIR /home/node/app
 COPY /myFolder .
 USER node
 COPY --chown=node:node . .
 RUN ["chmod", "777", "/home/node/app"]
 ENTRYPOINT /home/node/app
 CMD ["node myApp.js"]

Я создаю образ Docker с "docker build -t my_docker_image .", и он завершился без ошибок.

Далее я его запускаюс помощью команды "docker run --name my_run_docker_image -d my_docker_image", и она также завершена без ошибок, но когда я хочу проверить состояние моего нового контейнера с помощью команды "docker ps -l", я получаю информацию о том, что состояние моего контейнера "EXITED".

Следовательноя пытаюсь запустить его еще раз с помощью команды "docker start -a my_run_docker_image", но получаю сообщение об ошибке:

"узел MyApp.js: 1: узел myApp.js: / home / узел / приложение:В доступе отказано "

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

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

ENTRYPOINT и CMD сообщают Docker, какую команду запускать при запуске контейнера. Поскольку ENTRYPOINT является пустой строкой, она заключена в оболочку, а CMD игнорируется. Поэтому, когда вы запускаете свой контейнер, основной процесс контейнера -

/bin/sh -c '/home/node/app'

Что не получается, потому что это каталог.

В этом Dockerfile, в общем, я бы предложил две вещи. Во-первых, вы должны установить приложение с правами root, а затем запустить его без полномочий root для защиты от случайной перезаписи кода приложения. Второй - в большинстве случаев предпочесть CMD ENTRYPOINT, если вы не знаете, как они взаимодействуют. Вы можете придумать что-то более похожее на:

FROM node:4.2.6
MAINTAINER kamil
WORKDIR /app # Docker will create on first use
COPY myFolder .
RUN useradd node # its shell should never matter
USER node
CMD ["node", "myApp.js"]
0 голосов
/ 05 апреля 2019

Похоже, у вас проблема с командой добавления пользователя.

Изменить

RUN useradd -ms /bin/bash/node

до

RUN useradd -ms /bin/bash node

А также

RUN mkdir -p /home/node/app && -R node:node /home/node/app

Необходимо изменить на

RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
...