Отказ в доступе Docker Node при использовании пользователя без полномочий root - PullRequest
0 голосов
/ 30 августа 2018

Когда я пытаюсь запустить узел как контейнер докера с пользователем без полномочий root, он говорит:

ОШИБКА: для узла Невозможно запустить сервисный узел: Ошибка выполнения среды выполнения OCI: container_linux.go: 348: запуск процесса контейнера вызвал "chdir to cwd (\" / foo \ "), заданный в config.json, сбой: разрешение запрещено": неизвестно

Мой docker-compose.yml выглядит так:

...
node:
  image: node:latest
  container_name: my_node_thingy
  ports:
    - "3003:3000"
  user: "node"
  working_dir: /foo
  volumes:
    - /var/project:/foo/
  command: "node /foo/app.js"
  networks:
    - my-network
...

Когда я устанавливаю "root" как пользователь, он работает нормально, но при создании нового путем выполнения следующих действий контейнер не запускается:

adduser --disabled-password --gecos '' node
adduser node sudo
echo "node ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/node

Может кто-нибудь объяснить мне, как правильно настроить пользователя?

1 Ответ

0 голосов
/ 31 августа 2018

Если у вас есть разрешение на chmod -R 777 /var/project, пожалуйста, сделайте это, тогда все в порядке, вы можете продолжить использовать user: node.

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

Если вы все еще настаиваете на том, что хотите сделать Dockerfile пригодным для более жесткой среды. Тогда вам, возможно, придется использовать gosu.

Вам необходимо определить новый наследующий файл dockerfile от node:latest, в файле dockerfile установить gosu .

Примерно так:

FROM node:latest
RUN GOSU_SHA=5ec5d23079e94aea5f7ed92ee8a1a34bbf64c2d4053dadf383992908a2f9dc8a \
  && curl -sSL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.9/gosu-$(dpkg --print-architecture)" \
  && chmod +x /usr/local/bin/gosu \
  && echo "$GOSU_SHA  /usr/local/bin/gosu" | sha256sum -c - 
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

И, в entrypoint.sh, вам сначала нужно использовать gosu, чтобы изменить разрешение /foo, а затем запустить проект nodejs.

Наконец, удалите command в docker-compose.yml.

Может быть, быстрее изменить разрешение тома на хосте.

...