Dockerfile中切换至root用户后如何切回初始用户
Dockerfile中切换至root用户后如何切回初始用户
其实这个问题的核心在于,你得先搞清楚基础镜像someimage默认使用的用户是谁,然后在完成root权限的操作后,用USER指令切回那个用户就行。下面给你两种常用的解决思路:
方法一:已知基础镜像的初始用户
如果已经知道基础镜像的默认用户(比如很多Node.js镜像用node用户,部分定制化镜像用appuser),那直接在完成root操作后指定这个用户就行,示例Dockerfile如下:
FROM someimage # 切换到root用户执行需要权限的操作 USER root RUN dnf update -y && \ # 这里可以添加任意需要root权限的命令,比如安装系统依赖、修改系统配置 dnf install -y nginx && \ # 记得清理包管理缓存,减少最终镜像体积 rm -rf /var/cache/dnf # 切回基础镜像的初始用户,这里假设初始用户是appuser USER appuser
方法二:动态获取初始用户(适合不知道初始用户的情况)
如果不确定基础镜像的初始用户,或者想让Dockerfile更通用,可以在构建时动态获取基础镜像的用户信息,再传递给构建过程:
步骤1:构建时传递初始用户参数
在执行docker build命令时,先通过docker inspect获取基础镜像的用户,再以构建参数的形式传入:
docker build --build-arg ORIGINAL_USER=$(docker inspect -f '{{.Config.User}}' someimage) -t my-custom-image .
步骤2:Dockerfile中使用构建参数切回用户
在Dockerfile里接收这个构建参数,完成root操作后切回初始用户:
FROM someimage # 接收构建时传入的初始用户参数 ARG ORIGINAL_USER # 切换到root用户执行权限操作 USER root RUN dnf update -y && \ dnf install -y git && \ rm -rf /var/cache/dnf # 切回初始用户 USER $ORIGINAL_USER
这里要提醒一个小坑:USER是Dockerfile的专属指令,只会影响后续的构建步骤和容器启动后的默认用户;如果在RUN命令里执行su或者shell的USER命令,只会在当前RUN的进程中生效,不会改变后续步骤的用户哦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

