如何为Docker镜像添加仅拥有Jar文件只读权限的无root用户?
配置Docker镜像实现无root用户只读Jar文件
假设你的Jar文件最终会放在镜像内的/app/myapp.jar路径,可按以下步骤完成权限配置:
复制Jar文件到镜像指定目录
先以root身份将Jar文件复制到镜像中,示例指令:COPY target/myapp.jar /app/myapp.jar设置目录与Jar文件的权限
确保Jar文件仅开放读权限,同时所在目录允许用户进入:RUN mkdir -p /app \ # 目录设为所有用户可进入、可读 && chmod 755 /app \ # Jar文件设为所有用户只读 && chmod 444 /app/myapp.jar切换到自定义用户运行容器
在Dockerfile末尾添加USER指令,切换至之前创建的非root用户:USER $USERNAME可选:权限验证
构建镜像时可临时添加验证命令,确认用户无法修改Jar文件:RUN su $USERNAME -c "echo test >> /app/myapp.jar" || echo "权限验证通过:无法修改Jar文件"
完整Dockerfile片段示例
ARG USERNAME=MyCustomUser ARG USER_UID=10001 ARG USER_GID=$USER_UID RUN groupadd --gid $USER_GID $USERNAME \ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME # 复制Jar并配置权限 COPY target/myapp.jar /app/myapp.jar RUN mkdir -p /app \ && chmod 755 /app \ && chmod 444 /app/myapp.jar # 切换非root用户 USER $USERNAME # 启动应用 CMD ["java", "-jar", "/app/myapp.jar"]
关键说明
- 目录
/app设为755,保证自定义用户能进入目录访问Jar文件; - Jar文件设为
444,所有用户仅拥有读权限,满足Java运行Jar的需求; - 全程先用root完成文件复制与权限配置,最后切换用户,避免无权限操作文件系统。
内容的提问来源于stack exchange,提问作者andrew17
相关产品推荐
相关产品推荐

