首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile -创建非root用户几乎使图像大小加倍。

问Dockerfile -创建非root用户几乎使图像大小加倍。
EN

Stack Overflow用户
提问于 2021-01-10 05:56:24
回答 1查看 1.2K关注 0票数 2

在ubuntu之上创建了一个应用程序映像。应用程序需要一个非根用户。

我能够创建映像并使其工作,但是用于创建新用户的RUN语句显着地增加了该映像的大小。

Dockerfile片段:

代码语言:javascript
复制
  ## create newuser and give correct permissions to home directory
  RUN useradd newuser --create-home --shell /bin/bash  && \
      echo 'newuser:newpassword' | chpasswd && \
      chown -R newuser:newuser /home/newuser && \
      chmod 755 /home/newuser

  USER newuser

  WORKDIR /home/newuser

是否有更好的方法来创建一个新用户?

考虑其他方法,想知道是否使用多阶段构建来创建这个新用户,然后使用copy --from获取最终构建中的相关文件。不知道这些文件会是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-10 12:38:07

不要chown目录;让root拥有它。您还不需要设置shell或密码,也不需要创建主目录;在正常操作中不需要使用这些内容。

我建议在Dockerfile开始时创建用户(它是相当固定的,因此这个步骤可以缓存),但是当您设置如何运行容器的元数据时,只能在文件的末尾切换USER。

一个基于节点的示例:

代码语言:javascript
复制
FROM node:lts # debian-based

# Create the non-root user up front
RUN adduser --system --group --no-create-home newuser

# Copy and build the package as usual
WORKDIR /app
COPY package.json yarn.lock .
RUN yarn install
COPY . .
RUN yarn build

# Now the application is built
# And root owns all the files
# And that's fine

# Say how to run the container
EXPOSE 3000
USER newuser
CMD yarn start

让root拥有这些文件可以为您提供一些额外的保护,以防出现问题。如果存在允许容器中的文件被覆盖的错误,让不同的用户拥有这些文件将防止应用程序代码或静态资产被无意中修改。

如果应用程序需要读取或写入文件,则可以为此创建一个特定目录:

代码语言:javascript
复制
 # Towards the end of the file, but before the USER
 RUN mkdir data && chown newuser data

这将使操作符在否则为空的目录上挂载一些存储。这是唯一有新创建的用户ID的东西,所以如果存储与它自己的所有者一起出现,它不应该是一个操作问题;您还需要在容器启动时指定匹配的用户ID。

代码语言:javascript
复制
docker run -u $(id -u) -v $PWD/data:/app/data ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65650512

复制
相关文章

相似问题

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