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开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。