node.js – 以非root用户身份在Docker中运行应用程序

yesterday’s news of Shocker之后,似乎应用程序内部Docker容器不应该以root身份运行。我试图更新我的Dockerfile创建一个应用程序用户,但更改应用程序文件的权限(而仍然root)似乎不工作。我猜这是因为一些LXC权限不授予root用户可能?

这里是我的Dockerfile:

# Node.js app Docker file

FROM dockerfile/nodejs
MAINTAINER Thom Nichols "thom@thomnichols.org"

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一切仍然由根:

[ node@ed7ae33e76e1:/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/

My updated dockerfile works great感谢@ creak的澄清如何卷的工作。一旦初始文件被选中,npm install将作为非root用户运行。由于安装后挂钩,npm运行bower install&& grunt资源,它负责剩余的安装步骤,避免任何需要npm install -g任何节点cli工具,如bower,grunt或coffeescript。

解决方法

一个有点棘手,它实际上是由于你的图像开始。

如果你look at the source,你注意到/ data /是一个卷。因此,在Dockerfile中执行的任何操作都将被丢弃,并在运行时被安装的卷覆盖。

你可以chown在运行时通过改变你的CMD到像CMD chown -R节点/数据&& npm开始。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...