当前位置: 首页 > 面试题库 >

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

薛淳
2023-03-14
问题内容

在昨天的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



 类似资料:
  • 问题内容: 在昨天的Shocker消息发布之后,似乎Docker容器中的应用程序不应以root用户身份运行。我尝试更新自己以创建应用程序用户,但是更改对应用程序文件的权限(虽然仍然是root)似乎不起作用。我猜这是因为未将某些LXC权限授予root用户? 这是我的Dockerfile: 很简单,但是当我一切仍然由root拥有时: 感谢@creak对卷的工作原理的澄清,我更新的dockerfile的

  • 本文向大家介绍以非root用户身份运行Docker容器,包括了以非root用户身份运行Docker容器的使用技巧和注意事项,需要的朋友参考一下 当您在Docker容器中运行应用程序时,默认情况下,它有权访问所有root特权。您可能已经注意到,当打开Ubuntu Docker Container Bash时,默认情况下您以root用户身份登录。在应用程序的安全性方面,这可能是一个主要问题。任何局外人

  • 我使用Ansible安装了Nginx。要在Centos7上安装,我使用了yum软件包,因此默认情况下它是以root用户身份运行的。我希望它在Centos中以不同的用户(前nginx用户)身份启动和运行。当我尝试与其他用户一起运行时,会出现以下错误: nginx的工作。服务失败,因为控制进程已退出,错误代码为。有关详细信息,请参阅“systemctl status nginx.service”和“j

  • 问题内容: 在构建Docker映像时,如何将文件添加到映像中,以便生成的文件由root以外的用户拥有? 问题答案: 对于v17.09.0-ce及更高版本 将可选标志与或命令一起使用。 例如 --chown标志的文档现在位于Dockerfile参考主页面上。 版本 34263 已被合并,可以在v17.09.0-ce版本中使用。 对于v17.09.0-ce之前的版本 Docker不以root用户身份支

  • 问题内容: Docker 博客文章指出: 默认情况下,Docker容器是相当安全的。特别是如果您要以非特权用户(即非root用户)的身份在容器内运行进程。” 那么,如果我以root用户身份在docker下运行,安全问题是什么?我的意思是,如果我以非特权用户身份处理我的进程,这是非常安全的,那么,以root用户身份托管在容器中怎么会对我有害?我只是想让它理解它,如果以root身份运行时它不安全,那么

  • 问题内容: 运行时默认 要么 您以root用户身份连接到终端,但是我想以其他用户身份连接。这可能吗? 问题答案: 对于: 在启动Docker容器时,只需添加选项即可更改为其他用户。 对于或: 由于该命令用于附加/执行到现有进程中,因此它直接在此使用当前用户。 如果您确实想附加到想要拥有的用户,那么 从该用户开始或在您的使用中提及它 使用`su更改用户