更新 2025年4月1日入门Docker 实践笔记

Docker 构建时指定用户启动

解决 Docker 容器默认以 root 用户运行导致的权限问题,指定非 root 用户启动应用。

Docker运维Linux
Docker 构建时指定用户启动

前言

我们在 Linux 使用应用时,往往不会直接使用 root 用户作为应用启动项,但 Dockerfile 默认就是 root 用户,导致挂载生成的文件路径往往是 root 权限,非 root 用户访问就很不方便。

解决方案

1. 安装用户管理工具

若镜像非自带用户管理:

# 权限管理
RUN apk add --no-cache shadow

2. 创建用户并修改权限

# 创建用户组和用户
RUN addgroup -S <app_user_group> && adduser -S -G <app_user_group> <app_user>

# 修改目录权限
RUN chown -R <app_user_group>:<app_user> /data

3. 指定用户启动

执行 docker 时加 --user 参数:

docker run -it --user <app_user> <app_image>:<image_version>

完整示例

FROM alpine:latest

# 国内源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

RUN apk update --no-cache
# 权限管理
RUN apk add --no-cache shadow
# 调试
RUN apk add --no-cache bash
# 设置时区
RUN apk add --no-cache tzdata

ENV TZ=Asia/Shanghai

# 创建用户组和用户
RUN addgroup -S glog && adduser -S -G glog glog

COPY ./glog_static_musl_1 /app/

RUN mkdir /data

VOLUME [ "/data" ]
WORKDIR /data

# 修改权限
RUN chown -R glog:glog /data
RUN chown -R glog:glog /app

# 指定用户启动
USER glog
CMD [ "/app/glog_static_musl_1", "logsweb", "./conf.ini" ]

总结

关键步骤:

  1. apk add --no-cache shadow - 安装用户管理工具
  2. addgroup + adduser - 创建用户
  3. chown -R - 修改目录权限
  4. USER <username> - 指定运行用户

这样容器内的应用就不再以 root 身份运行,更加安全。

当前系列

Docker 实践笔记

查看全部 2 篇

上一篇

Docker 编译 musl 可执行文件

已经是本系列最后一篇

评论