以非root用户身份在Docker内部运行应用程序

在昨天的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一切仍然由root拥有时:

[ 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/


感谢@creak对卷的工作原理的澄清,我更新的dockerfile的工作非常出色。chowned 初始文件完成后,npm

install将以非root用户身份运行。而且由于采用了postinstall钩,NPM运行bower install && grunt

assets这需要的剩余安装步骤护理和避免任何需要npm install -g的任何节点CLI工具,如凉亭,咕噜或CoffeeScript的。

回答:

这个有点棘手,实际上是由于您从图片开始。

如果查看源,您会注意到这/data/是一个卷。因此,您在中所做的所有操作Dockerfile都会在运行时被丢弃,然后被安装的卷覆盖。

您可以在运行时通过将CMD更改为来进行调整CMD chown -R node /data && npm start

以上是 以非root用户身份在Docker内部运行应用程序 的全部内容, 来源链接: utcz.com/qa/419550.html

回到顶部