После вчерашних новостей о Shocker, похоже, что приложения внутри контейнера Docker не должны запускаться с правами root. Я попытался обновить свой Dockerfile
, чтобы создать пользователя приложения, однако изменение прав доступа к файлам приложений (хотя и остается root) не работает. Я предполагаю, что это связано с тем, что некоторые разрешения LXC не предоставляются корневому пользователю, возможно?
Здесь мой файл Docker:
# Node.js app Docker file
FROM dockerfile/nodejs
MAINTAINER Thom Nichols "[email protected]"
RUN useradd -ms /bin/bash node
ADD . /data
# This next line doesn't seem to have any effect:
RUN chown -R node /data
ENV HOME /home/node
USER node
RUN cd /data && npm install
EXPOSE 8888
WORKDIR /data
CMD ["npm", "start"]
Довольно просто, но когда я ls -l
все еще принадлежит root:
[ [email protected]:/data {docker-nonroot-user} ]$ ls -l /data
total 64K
-rw-r--r-- 1 root root 383 Jun 18 20:32 Dockerfile
-rw-r--r-- 1 root root 862 Jun 18 16:23 Gruntfile.js
-rw-r--r-- 1 root root 1.2K Jun 18 15:48 README.md
drwxr-xr-x 4 root root 4.0K May 30 14:24 assets/
-rw-r--r-- 1 root root 416 Jun 3 14:22 bower.json
-rw-r--r-- 1 root root 930 May 30 01:50 config.js
drwxr-xr-x 4 root root 4.0K Jun 18 16:08 lib/
drwxr-xr-x 42 root root 4.0K Jun 18 16:04 node_modules/
-rw-r--r-- 1 root root 2.0K Jun 18 16:04 package.json
-rw-r--r-- 1 root root 118 May 30 18:35 server.js
drwxr-xr-x 3 root root 4.0K May 30 02:17 static/
drwxr-xr-x 3 root root 4.0K Jun 18 20:13 test/
drwxr-xr-x 3 root root 4.0K Jun 3 17:38 views/
Мой обновленный файл docker отлично работает благодаря @creak разъяснению того, как работают тома. Как только исходные файлы chown
ed, npm install
запускается как пользователь без полномочий root. И благодаря крючку postinstall
, npm запускает bower install && grunt assets
, который выполняет оставшиеся шаги установки и избегает необходимости npm install -g
любых node cli-инструментов, таких как bower, grunt или coffeescript.