【发布时间】:2014-08-10 02:51:24
【问题描述】:
在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 对卷如何工作的澄清。一旦初始文件是chowned,npm install 就会以非 root 用户身份运行。多亏了 postinstall 钩子,npm 运行 bower install && grunt assets,它负责其余的安装步骤,并避免了 npm install -g 任何节点 cli 工具,如 bower、grunt 或 coffeescript。
【问题讨论】:
-
只是好奇,您确定
node用户正在创建吗? -
@a.m.是的,用户肯定是创建的。当我运行
docker run -it myimage /bin/bash和whoami时,我以node登录,这是我所期望的。