首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以非root用户身份在Docker中运行应用程序

以非root用户身份在Docker中运行应用程序
EN

Stack Overflow用户
提问于 2014-06-19 22:13:19
回答 2查看 72.4K关注 0票数 78

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

这是我的Dockerfile:

代码语言:javascript
复制
# 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时,所有东西仍然归根用户所有:

代码语言:javascript
复制
[ 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对卷是如何工作的澄清。一旦对初始文件进行了chown编辑,就会以非根用户身份运行npm install。多亏了一个postinstall钩子,npm可以运行bower install && grunt assets,它负责其余的安装步骤,并避免了任何需要npm install -g任何节点cli工具的需要,如bower,grunt或coffeescript。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-20 04:24:37

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

如果您使用look at the source,您会注意到/data/是一个卷。因此,您在Dockerfile中所做的所有操作都将在运行时被随后挂载的卷丢弃和覆盖。

您可以在运行时通过将CMD更改为类似于CMD chown -R node /data && npm start的形式来更改。

票数 16
EN

Stack Overflow用户

发布于 2014-08-31 16:00:53

查看这篇文章:在rultor.com中,我们在自己的http://www.yegor256.com/2014/08/29/docker-non-root.html容器中运行所有的构建。每次在容器内运行脚本之前,我们都会切换到非root用户。这是如何实现的:

代码语言:javascript
复制
adduser --disabled-password --gecos '' r
adduser r sudo
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
su -m r -c /home/r/script.sh

r是我们使用的用户。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24308760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档